dask client.submit的行为

时间:2018-10-26 14:24:19

标签: python parallel-processing dask

使用以下示例:

from random import random
def add_random(x):
    return x + random()

results = []
for i in range(200):
    results.append(client.submit(add_random, 2))
results[0]

我注意到结果中的所有期货都具有与results[0]相同的密钥。因此,result中所有单独的results都具有相同的值。

另一方面,如果我使每个函数调用都唯一:

def addone(x, i):
    return x + 1

results = []
for i in range(200):
    results.append(client.submit(addone, 2, i))
results[0]

每个未来都有唯一的密钥,result列表中的所有results都是唯一的。

这是预期的行为吗?我最初认为在第一种情况下,我应该得到在第二种情况下得到的结果。

1 个答案:

答案 0 :(得分:1)

默认情况下,Dask假定传递给它的所有函数都是确定性的,即给定相同的输入,它们将产生相同的输出。这有助于我们删除重复数据。

对于您的函数,情况并非如此,由于调用random(),如果输入相同,它将返回不同的值。您可以通过指定pure=False关键字参数来提交来覆盖确定性行为。

future = client.submit(func, x, pure=False)