我試圖避免必須將變量冗餘地傳遞到dataList
(例如[(1, globalDict), (2, globalDict), (3, globalDict)]
),並在全局範圍內使用它們。然而,在下面的代碼中,global globalDict
不是這樣做的解決方案。使用多處理和池時如何訪問全局變量?
有沒有一種直接的方式來訪問全局多處理函數中的數據?
我閱讀以下here:
「通信是昂貴 相反的線程之間的通信,交換過程之間的數據是昂貴得多在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()
Windows中的任何unixy系統這種方式有很大的不同。你使用哪個? – tdelaney
Unix,Python 2.7 – Phillip