python - dask client.submit 的行为

标签 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]

我注意到结果中的所有 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/

相关文章:

python - 如何以及在哪里从 github 安装 python 模块

python - 如何实现ZCA美白? Python

Python 尝试从 youtube api 获取数据时出错

python - 在 komodo 编辑中使用 time.sleep()?

multithreading - 使用嵌套并行性并行计算 c𝑖 = √(a𝑖 × b𝑖)

python - 为什么 Dask 的执行速度如此之慢,而多进程的执行速度如此之快?

c++ - 并行位置

python - Dask分布式计算反序列化错误

python - 如何在 dask/distributed 中存储 worker-local 变量

dask - Dask 如何处理函数定义中的外部或全局变量?