在python的Dask.multiprocessing中拥有一个共享对象

时间:2017-08-01 23:26:52

标签: python multiprocessing dask

我正在使用dask库试图创建多线程程序。但我在这里面临一个问题。 例如:

from dask import compute, delayed
import dask.multiprocessing

arr = []

def add():
    arr.append("a")

tasks = [delayed(add)(),delayed(add)()]
compute(*tasks, get = dask.multiprocessing.get)
print(arr)

此代码的输出只是[ ] ..因为我正在使用多处理。如果我使用get = dask.threaded.get 代码的输出将是= ['a', 'a']

我还需要使用多处理来实现多核上的实际并行性。

所以我的问题是..有没有办法使用dask.multiprocessing并且仍然能够访问共享对象?

1 个答案:

答案 0 :(得分:2)

在正常操作下,Dask假定函数不依赖于全局状态。您的函数应该使用输入和返回输出,并且不应该依赖于给出的任何其他信息。

即使使用线程调度程序,您也可能需要注意影响全局状态,因为该状态可能不是线程安全的。