一個python多進(jìn)程計數(shù)器的問題
問題描述
寫了個多進(jìn)程的腳本,然后其中有個計數(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,))
最終程序運(yùn)行時發(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ìn)程已經(jīng)做了加一操作了,但這個879999少一個,我就有點(diǎn)想不通了?
問題解答
回答1:滿足打印條件的進(jìn)程剛要打印,其它進(jìn)程在做+1操作,取值,+1,賦值回去需要好幾條指令,其實(shí)可能出現(xiàn)任何值,因為取值這條指令可以發(fā)生在任何時刻。
相關(guān)文章:
1. java - 阿里的開發(fā)手冊中為什么禁用map來作為查詢的接受類?2. apache - 想把之前寫的單機(jī)版 windows 軟件改成網(wǎng)絡(luò)版,讓每個用戶可以注冊并登錄。類似 qq 的登陸,怎么架設(shè)服務(wù)器呢?3. 創(chuàng)建mysqli對象與數(shù)據(jù)庫連接 - 出錯4. 用Html5怎么實(shí)現(xiàn)簡單選擇排序?5. node.js - win7下,npm 無法下載依賴包,淘寶鏡像也裝不上,求幫忙???6. mysql 的datadir設(shè)置的文件夾不存在,啟動了mysql服務(wù)后創(chuàng)建的數(shù)據(jù)庫存在哪里?7. mysql 使用group_concat后 順序改變是怎么回事?8. python - uwsgi+django的搭建問題9. php多任務(wù)倒計時求助10. 如何合并兩張具有相同結(jié)構(gòu)的mysql表
