我有2个非常简单的功能:
import time
def sleepy(a=1):
time.sleep(a)
print(a)
def ending(*args):
print(args)
print('finished')
我还有一个使用以下功能的简单工作流程:
workflow = {'task_0': (sleepy, 1),
'task_1': (sleepy, 2),
'task_2': (sleepy, 3),
'ending': (ending, 'task_0', 'task_1', 'task_2')}
此工作流程可以如下所示:
sleepy
,sleepy
,sleepy
应该并行运行,但不是并行运行。
我等待1秒钟,然后从sleepy()
打印1,然后等待2秒,然后打印2,然后再等待3秒,然后打印3:
1
2
3
(None, None, None)
finished
我在做什么错了?
答案 0 :(得分:2)
这就是我编写工作流程的方式,并且睡眠操作确实是并行发生的
import dask.delayed
import time
@dask.delayed
def sleepy(a=1):
time.sleep(a)
print(a)
@dask.delayed
def ending(*args):
print(args)
print('finished')
d = ending(*[sleepy(i) for i in [1, 2, 3]])
d.compute()
请注意,@
装饰器仅是语法上的优美,您也可以执行dask.delayed(sleepy)
等。
答案 1 :(得分:0)
将dask.get(
更改为dask.threaded.get(
可以解决我的问题,但我也非常喜欢mdurant的回答。