一个python多进程计数器的问题

发布于 2022-09-04 19:57:57 字数 712 浏览 17 评论 0

写了个多进程的脚本,然后其中有个计数器,大致逻辑如下

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少一个,我就有点想不通了?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦归所梦 2022-09-11 19:57:57

满足打印条件的进程刚要打印,其它进程在做+1操作,取值,+1,赋值回去需要好几条指令,其实可能出现任何值,因为取值这条指令可以发生在任何时刻。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文