使用以下示例:
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]
我注意到结果中的所有 future 都与 results[0]
具有相同的键。因此,results
中的所有单独结果
都具有相同的值。
另一方面,如果我使每个函数调用都是唯一的:
def addone(x, i):
return x + 1
results = []
for i in range(200):
results.append(client.submit(addone, 2, i))
results[0]
每个 future 都有一个唯一的键,并且 results
列表中的所有 result
都是唯一的。
这是预期的行为吗?我最初假设在第一种情况下,我应该得到在第二种情况下得到的结果。
最佳答案
默认情况下,Dask 假定传递给它的所有函数都是确定性的,即给定相同的输入,它们会产生相同的输出。这有助于我们消除重复工作。
对于您的函数来说,情况并非如此,由于 random()
调用,它会在给定相同输入的情况下返回不同的值。您可以通过指定要提交的 pure=False
关键字参数来覆盖确定性行为。
future = client.submit(func, x, pure=False)
关于python - dask client.submit 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53010841/