与我同在,这是一个非常具体的设置;考虑以下代码:
# 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
不能并行计算a
和b
。但是,这是非常特定于当前设置:
processes=False
Client
保留下来并再次第二次提交同一张图,它会按预期工作(因此需要进行某种热身操作)这必须与腌制Container
以及我正在纺新的subprocess
有关,但是我很想知道为什么发生这种情况以及将来如何抢先识别这种情况。