내 테스트 코드는 스레딩을 사용하여 다음과 같습니다. 카운트가 5,000,000이 아니므로 데이터 경쟁이 있었지만 gevent를 사용하면 카운트가 5,000,000이고 데이터가 없었습니다 경주.스레딩 데이터 경쟁이 발생하지만 gevent를 사용하지 않는 이유는 무엇입니까?
gevent coroutine 실행은 하나의 CPU 명령어로 분할하지 않고 "count + = 1"원자로 실행합니까?
# -*- coding: utf-8 -*-
import threading
use_gevent = True
use_debug = False
cycles_count = 100*10000
if use_gevent:
from gevent import monkey
monkey.patch_thread()
count = 0
class Counter(threading.Thread):
def __init__(self, name):
self.thread_name = name
super(Counter, self).__init__(name=name)
def run(self):
global count
for i in xrange(cycles_count):
if use_debug:
print '%s:%s' % (self.thread_name, count)
count = count + 1
counters = [Counter('thread:%s' % i) for i in range(5)]
for counter in counters:
counter.start()
for counter in counters:
counter.join()
print 'count=%s' % count
안녕하세요. @onlytiancai, 질문의 중국어 버전을 삭제했습니다.이 사이트는 영어로 충분합니다. 감사! –