dask 的行为 client.submit

Behaviour of dask client.submit

用下面的例子:

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] 具有相同的键。因此,results 中的所有个体 result 都具有相同的值。

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

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

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

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

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

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

对于您的函数,这不是真的,它 returns 由于 random() 调用而给定相同输入的不同值。您可以通过指定要提交的 pure=False 关键字参数来覆盖确定性行为。

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