使用以下示例:
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
都是唯一的。
这是预期的行为吗?我最初认为在第一种情况下,我应该得到在第二种情况下得到的结果。
答案 0 :(得分:1)
默认情况下,Dask假定传递给它的所有函数都是确定性的,即给定相同的输入,它们将产生相同的输出。这有助于我们删除重复数据。
对于您的函数,情况并非如此,由于调用random()
,如果输入相同,它将返回不同的值。您可以通过指定pure=False
关键字参数来提交来覆盖确定性行为。
future = client.submit(func, x, pure=False)