在python中拥有共享对象';多重处理
我正在使用在python中拥有共享对象';多重处理,python,multiprocessing,dask,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) 此代码的输出只是
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并仍然能够访问共享对象?在正常操作下,dask假设函数不依赖于全局状态。您的函数应该使用输入并返回输出,并且不应该依赖于给定信息以外的任何其他信息
即使在使用线程调度程序时,您也可能要小心影响全局状态,因为该状态可能不是线程安全的。可能重复@ppperry建议的问题是关于python的多处理库中处理问题的方式。我想问一下达斯克图书馆的情况。两者都有完全不同的实现方式。所以你是说没有办法?你可以看看的一些更先进的技术的底部。但一般来说,没有办法做到你所要求的。当您跨进程或机器并行化时,您必然会失去对共享状态的访问。