一个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. $fields = $values = [];这条代码一直定义不了,一直报错,老师的源码也是被报错的,执行不了,请问该怎么解决这个问题2. python - 求一个在def中可以实现调用本def满足特定条件continue效果的方法(标题说不太清楚,请见题内描述)3. angular.js - angularjs的自定义过滤器如何给文字加颜色?4. MYSQL新建用户设置可以远程访问的问题5. javascript - 用表单提交两个时间段请求后台返回对应数据时出现的一些问题!6. mysql - SQL操作时间的函数?7. java - mybatis怎么实现在数据库中有就修改,没有就添加8. docker内创建jenkins访问另一个容器下的服务器问题9. docker-compose中volumes的问题10. node.js - nodejs和前端JavaScript 字符串处理结果不一样是什么原因?
![$fields = $values = [];这条代码一直定义不了,一直报错,老师的源码也是被报错的,执行不了,请问该怎么解决这个问题](http://www.haobala.com/attached/image/news/202205/093622cb60.png)