一個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,多一個我能理解,當(dāng)if co[0] % 10000 == 0判斷時,其他進程已經(jīng)做了加一操作了,但這個879999少一個,我就有點想不通了?
問題解答
回答1:滿足打印條件的進程剛要打印,其它進程在做+1操作,取值,+1,賦值回去需要好幾條指令,其實可能出現(xiàn)任何值,因為取值這條指令可以發(fā)生在任何時刻。
相關(guān)文章:
1. javascript - 關(guān)于定時器 與 防止連續(xù)點擊 問題2. html - css 如何添加這種邊框?3. javascript - 求助這種功能有什么好點的插件?4. objective-c - ios百度地圖定位問題5. html5 - 如何解決bootstrap打開模態(tài)modal窗口引起頁面抖動?6. javascript - 求助關(guān)于js正則問題7. javascript - node.js服務(wù)端渲染解疑8. html5 - rudy編譯sass的時候有中文報錯9. 為何 localStorage、sessionStorage 屬于html5的范疇,但是為何 IE8卻支持?10. 微信開放平臺 - Android調(diào)用微信分享不顯示
