繁体   English   中英

使用dask分布式并行运行shell命令

[英]Running shell commands in parallel using dask distributed

我有一个包含很多.sh脚本的文件夹。 如何使用已设置的dask分布式集群并行运行它们?

目前,我正在做以下事情:

import dask, distributed, os

# list with shell commands that I want to run
commands = ['./script1.sh', './script2.sh', './script3.sh']

# delayed function used to execute a command on a worker
run_func = dask.delayed(os.system)

# connect to cluster
c = distributed.Client('my_server:8786')

# submit job
futures = c.compute( [run_func(c) for c in commands])

# keep connection alive, do not exit python
import time
while True:
    time.sleep(1)

这是有效的,但是对于这种情况,如果客户端可以断开而不会导致调度程序取消作业,那将是理想的。 我正在寻找一种计算我的任务的方法,不需要活动的客户端连接。 怎么可以这样做?

你见过http://distributed.readthedocs.io/en/latest/api.html#distributed.client.fire_and_forget吗? 这将是一种确保客户端离开后在集群上运行某些任务的方法。

另请注意,您有wait()甚至gather() wait()函数,因此您不需要Sleep-forever循环。

但是,一般情况下, subprocess.Popen将启动一个子进程而不是等待它完成,所以你甚至不需要任何复杂的dask,因为看起来你不会对调用的任何输出感兴趣。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM