我正在使用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并且仍然能够访问共享对象?
答案 0 :(得分:2)
在正常操作下,Dask假定函数不依赖于全局状态。您的函数应该使用输入和返回输出,并且不应该依赖于给出的任何其他信息。
即使使用线程调度程序,您也可能需要注意影响全局状态,因为该状态可能不是线程安全的。