写了个多进程的脚本,然后其中有个计数器,大致逻辑如下
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 879999
INFO: 2017-04-11 16:42:19,292 - 13583 - Parsed 880000
INFO: 2017-04-11 16:42:19,295 - 13593 - Parsed 880001
INFO: 2017-04-11 16:42:19,297 - 13597 - Parsed 880001
这里的880001,多一个我能理解,当if co[0] % 10000 == 0
判断时,其他进程已经做了加一操作了,但这个879999少一个,我就有点想不通了?
Proses yang memenuhi syarat pencetakan akan dicetak dan proses lain sedang melakukan operasi +1, mendapatkan nilai, +1 dan memberikan nilai semula memerlukan beberapa arahan, sebenarnya, sebarang nilai mungkin muncul. kerana arahan untuk mendapatkan nilai boleh berlaku pada bila-bila masa.