为什么`dask.distributed`无法并行化我的工作流程的第一次运行?

时间:2018-08-31 19:31:30

标签: python multiprocessing subprocess dask dask-distributed

与我同在,这是一个非常具体的设置;考虑以下代码:

# sys.version = 3.6.6
# distributed.__version__ = 1.22.0

import subprocess
from distributed import Client
from time import sleep

def start():
    subprocess.check_output(['bash', '-c', 'ls'])

class Container:
    def __init__(self, fn):
        self.fn = fn
    def run(self, *args, **kwargs):
        return self.fn(*args, **kwargs)

%%time
with Client(processes=True) as client:
    f = client.submit(Container(start).run, pure=False)
    a = client.submit(Container(lambda x: sleep(5)).run, f, pure=False)
    b = client.submit(Container(lambda x: sleep(5)).run, f, pure=False)
    res = client.gather([a, b])
# Wall time: 10.7 s

我进行了其他一些更复杂的测试,由于某种原因,distributed不能并行计算ab。但是,这是非常特定于当前设置:

  • 如果processes=False
  • 可以正常工作
  • 直接提交功能可以正常工作
  • 如果我将Client保留下来并再次第二次提交同一张图,它会按预期工作(因此需要进行某种热身操作)

这必须与腌制Container以及我正在纺新的subprocess有关,但是我很想知道为什么发生这种情况以及将来如何抢先识别这种情况。

0 个答案:

没有答案