python3.x - python多線程如何修改數(shù)據(jù)?
問題描述
代碼比較簡單
import multiprocessingimport timelist1 = [1,2,3]def func(msg): list1[0] = 99 return 'done ' + msgif __name__ == '__main__': pool = multiprocessing.Pool(processes=4) for i in range(10):msg = 'hello %d' % (i)pool.apply_async(func, (msg,)) pool.close() pool.join() print (list1)
因?yàn)檎鎸?shí)的環(huán)境比較多,所以簡化了代碼,我大概的需求就是list1是一個(gè)比較多的數(shù)據(jù)列表,然后在多線程處理的時(shí)候,每次更新其中一項(xiàng)數(shù)據(jù)...
但是我運(yùn)行以后,發(fā)現(xiàn)list1還是[1,2,3] , 我理想應(yīng)該是[99,2,3]
有高手指點(diǎn)一下要如何實(shí)現(xiàn)嗎?
問題解答
回答1:不好意思,你用的multiprocessing是多進(jìn)程而不是多線程,每個(gè)進(jìn)程中的變量都是獨(dú)立的,
你應(yīng)該使用threading,這個(gè)才是多線程
如果你堅(jiān)持用multiprocessing,就必須用共享變量,你可以將list里的數(shù)據(jù)存入Queue中,Queue是python中的共享隊(duì)列,用于多進(jìn)程通信的
相關(guān)文章:
1. javascript - 如何使用loadash對(duì)[object,object,object]形式的數(shù)組進(jìn)行比較2. 這種數(shù)據(jù)怎么合并啊?3. 請(qǐng)教各位大佬,瀏覽器點(diǎn) 提交實(shí)例為什么沒有反應(yīng)4. javascript - 如何清除向可編輯的(contenteditable)元素里粘貼的文本的標(biāo)簽和樣式?5. mysql優(yōu)化 - 關(guān)于mysql分區(qū)6. 如何分別在Windows下用Winform項(xiàng)模板+C#,在MacOSX下用Cocos Application項(xiàng)目模板+Objective-C實(shí)現(xiàn)一個(gè)制作游戲的空的黑窗口?7. angular.js - 百度支持_escaped_fragment_嗎?8. javascript - ionic2 input autofocus 電腦成功,iOS手機(jī)鍵盤不彈出9. nlp - python如何對(duì)一篇文章自動(dòng)分段?10. css3 - 這個(gè)形狀使用CSS怎么寫出來?
