一個python多進程計數(shù)器的問題
問題描述
寫了個多進程的腳本,然后其中有個計數(shù)器,大致邏輯如下
def worker(co): # working co[0] += 1 if co[0] % 10000 == 0:logging.info('Parsed {}'.format(co[0]))def main(): co = Manager.list() co[0] = 1 pool = Pool() for i in range(10):pool.apply_async(worker, (co,))
最終程序運行時發(fā)現(xiàn)個有趣的問題
INFO: 2017-04-11 16:42:19,288 - 13582 - Parsed 879999INFO: 2017-04-11 16:42:19,292 - 13583 - Parsed 880000INFO: 2017-04-11 16:42:19,295 - 13593 - Parsed 880001INFO: 2017-04-11 16:42:19,297 - 13597 - Parsed 880001
這里的880001,多一個我能理解,當if co[0] % 10000 == 0判斷時,其他進程已經(jīng)做了加一操作了,但這個879999少一個,我就有點想不通了?
問題解答
回答1:滿足打印條件的進程剛要打印,其它進程在做+1操作,取值,+1,賦值回去需要好幾條指令,其實可能出現(xiàn)任何值,因為取值這條指令可以發(fā)生在任何時刻。
相關(guān)文章:
1. debian - docker依賴的aufs-tools源碼哪里可以找到啊?2. dockerfile - 我用docker build的時候出現(xiàn)下邊問題 麻煩幫我看一下3. docker網(wǎng)絡(luò)端口映射,沒有方便點的操作方法么?4. docker-compose 為何找不到配置文件?5. macos - mac下docker如何設(shè)置代理6. docker start -a dockername 老是卡住,什么情況?7. docker 下面創(chuàng)建的IMAGE 他們的 ID 一樣?這個是怎么回事????8. 如何解決Centos下Docker服務(wù)啟動無響應(yīng),且輸入docker命令無響應(yīng)?9. angular.js使用$resource服務(wù)把數(shù)據(jù)存入mongodb的問題。10. docker gitlab 如何git clone?

網(wǎng)公網(wǎng)安備