一个python多进程计数器的问题
巴扎黑
巴扎黑 2017-04-18 10:33:29
0
1
770

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

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

巴扎黑
巴扎黑

모든 응답(1)
洪涛

인쇄 조건을 만족하는 프로세스는 바로 인쇄를 앞두고 있고, 다른 프로세스에서는 +1 연산을 하고, 값을 얻어 +1하고, 값을 다시 할당하려면 실제로 어떤 값이 나타날 수도 있는데, 값을 가져오는 명령은 언제든지 발생할 수 있기 때문입니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!