一個(gè)python多進(jìn)程計(jì)數(shù)器的問(wèn)題
問(wèn)題描述
寫(xiě)了個(gè)多進(jìn)程的腳本,然后其中有個(gè)計(jì)數(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)行時(shí)發(fā)現(xiàn)個(gè)有趣的問(wè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,多一個(gè)我能理解,當(dāng)if co[0] % 10000 == 0判斷時(shí),其他進(jìn)程已經(jīng)做了加一操作了,但這個(gè)879999少一個(gè),我就有點(diǎn)想不通了?
問(wèn)題解答
回答1:滿(mǎn)足打印條件的進(jìn)程剛要打印,其它進(jìn)程在做+1操作,取值,+1,賦值回去需要好幾條指令,其實(shí)可能出現(xiàn)任何值,因?yàn)槿≈颠@條指令可以發(fā)生在任何時(shí)刻。
相關(guān)文章:
1. python - 使用xlsxwriter寫(xiě)入Excel, 只能寫(xiě)入65536 無(wú)法繼續(xù)寫(xiě)入.2. Python做掃描,發(fā)包速度實(shí)在是太慢了,有優(yōu)化的方案嗎?3. objective-c - ios百度地圖定位問(wèn)題4. java - Web開(kāi)發(fā) - POI導(dǎo)出帶有下拉框的Excel和解決下拉中數(shù)組過(guò)多而產(chǎn)生的異常5. java - 微信退款,公賬號(hào)向個(gè)人轉(zhuǎn)賬SSL驗(yàn)證失敗6. java - 安卓接入微信登錄,onCreate不會(huì)執(zhí)行7. python - flask如何創(chuàng)建中文列名的數(shù)據(jù)表8. javascript - 關(guān)于定時(shí)器 與 防止連續(xù)點(diǎn)擊 問(wèn)題9. 微信開(kāi)放平臺(tái) - Android調(diào)用微信分享不顯示10. python - mysql 如何設(shè)置通用型字段? 比如像mongodb那樣
