我寫了一個函數來修改傳入的字典。但是,當我使用多處理模塊對代碼進行並行處理時,它在串行運行時表現出不同的行爲。字典沒有被修改。使用多處理混亂修改傳入對象
下面附上的是我的問題的玩具示例。當使用map_async運行時,字典未被修改,但在for循環中運行時被修改。感謝您澄清我的困惑!
#!/usr/bin/env python
from multiprocessing import Pool
def main1(x):
x['a'] = 1
print x
return 1
def main2(x):
x['b'] = 2
print x
p = Pool(2)
d = {1:{}, 2:{}}
r = p.map_async(main1, d.values())
print r.get()
print "main1", d
for x in d.values():
main2(x)
print "main2", d
我試着運行你的代碼,它填滿了我的內存並使我的電腦崩潰。大聲笑。我在一臺win7機器上,我假設你在Linux上? – Onlyjus
@Onlyjus是的,我在OSX上運行這個。對於那個很抱歉!我沒有包含一個'if __name__ =='__main __'',這顯然[在Windows中會導致意外的副作用](http://docs.python.org/library/multiprocessing.html#multiprocessing-programming)。 – user449511
是的,這將做到這一點。 – Onlyjus