为什么不敢并行处理此工作流程?

时间:2018-09-13 17:05:30

标签: python parallel-processing dask

我有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')}

此工作流程可以如下所示:

dask.visualize(workflow)

sleepysleepysleepy应该并行运行,但不是并行运行。

我等待1秒钟,然后从sleepy()打印1,然后等待2秒,然后打印2,然后再等待3秒,然后打印3:

1
2
3
(None, None, None)
finished

我在做什么错了?

2 个答案:

答案 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的回答。