一個python多進程計數器的問題
問題描述
寫了個多進程的腳本,然后其中有個計數器,大致邏輯如下
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,))
最終程序運行時發現個有趣的問題
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判斷時,其他進程已經做了加一操作了,但這個879999少一個,我就有點想不通了?
問題解答
回答1:滿足打印條件的進程剛要打印,其它進程在做+1操作,取值,+1,賦值回去需要好幾條指令,其實可能出現任何值,因為取值這條指令可以發生在任何時刻。
相關文章:
1. android - 安卓做前端,PHP做后臺服務器 有什么需要注意的?2. docker不顯示端口映射呢?3. mysql - 我用SQL語句 更新 行的時候,發現全部 中文都被清空了,請問怎么解決?4. python - 子進程執行完成為僵尸進程,怎么解決5. python - xpath提取網頁路徑沒問題,但是缺失內容?6. javascript - 求教各位,本地HTML頁面怎么在DIV中嵌套服務器上的頁面內容?不用iframe。7. python-mysql Commands out of sync8. java中返回一個對象,和輸出對像的值,意義在哪兒9. javascript - 給某個類添加一個偽類,這個類有click事件,現在我點擊偽類也觸發了click事件10. docker images顯示的鏡像過多,狗眼被亮瞎了,怎么辦?
