我试图避免将变量冗余地传递到dataList
(e.g. [(1, globalDict), (2, globalDict), (3, globalDict)]
)并在全球范围内使用它们。global globalDict
然而,在下面的代码中并不是这样做的解决方案。
是否有一种直接的方法可以全局访问多处理函数中的数据?
我读了以下内容here http://tding.in/2016/10/23/python-multiprocessing.html:
"沟通是昂贵的。与线程之间的通信相比,进程之间交换数据的成本要高得多。在 Python 中,数据在通过管道传输之前会被腌制为二进制格式。因此,当任务较小时,通信开销可能非常大。为了减少额外成本,最好分块分配任务。”
我不确定这是否适用于此,但我想在任何情况下简化数据访问。
def MPfunction(data):
global globalDict
data += 1
# use globalDict
return data
if __name__ == '__main__':
pool = mp.Pool(mp.cpu_count())
try:
globalDict = {'data':1}
dataList = [0, 1, 2, 3]
data = pool.map(MPfunction, dataList, chunksize=10)
finally:
pool.close()
pool.join()
pool.terminate()