python3.x - python多線程如何修改數(shù)據(jù)?
問(wèn)題描述
代碼比較簡(jiǎn)單
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)境比較多,所以簡(jiǎ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)嗎?
問(wè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. docker-machine添加一個(gè)已有的docker主機(jī)問(wèn)題2. node.js - node express 中ajax post請(qǐng)求參數(shù)接收不到?3. html - 用ajax提交表單后,返回驗(yàn)證數(shù)據(jù)在頁(yè)面location.href跳轉(zhuǎn)到主頁(yè),怎么傳遞session給主頁(yè)4. angular.js - grunt server 報(bào)錯(cuò)5. apache - nginx 日志刪除后 重新建一個(gè)文件 就打不了日志了6. java - tomcat服務(wù)經(jīng)常晚上會(huì)掛,求解?7. java - 原生CGLib內(nèi)部方法互相調(diào)用時(shí)可以代理,但基于CGLib的Spring AOP卻代理失效,為什么?8. 網(wǎng)站被黑,請(qǐng)教下大神,怎么對(duì)datebase.php內(nèi)容加密。9. mysql - sql查詢語(yǔ)句問(wèn)題10. mysql的主從復(fù)制、讀寫分離,關(guān)于從的問(wèn)題
