线程(run 方法) 之外的变量,多个线程竞争会有临界点问题,需要注意(如 worker3 就存在多个线程操作sum ,引起错乱)
线程(run 方法) 之内的变量,为单个线程独立所拥有 (如worker2)
线程(run 方法) 之外的变量,可以通过local 线程本地数据 (如worker)
sum=0
l=local()
#sum 为线程本地数据,多个线程,多个sum
def worker():
global sum
l.sum=sum
for i in range(100):
time.sleep(0.01)
l.sum+=1
print(current_thread() , l.sum)
<Thread(Thread-4, started 26556)> 100
<Thread(Thread-10, started 19048)> 100
<Thread(Thread-5, started 6408)> 100
<Thread(Thread-6, started 19804)> 100
<Thread(Thread-1, started 11032)> 100
<Thread(Thread-2, started 3152)> 100
<Thread(Thread-9, started 22048)> 100
<Thread(Thread-8, started 7040)> 100
<Thread(Thread-3, started 17376)> 100
<Thread(Thread-7, started 1760)> 100
#存在竞争问题 ,多个进程对一个sum 变量操作
def worker3():
global sum
sum=0
for i in range(100):
time.sleep(0.001)
sum+=1
print(current_thread() , sum)
<Thread(Thread-3, started 20540)> 975
<Thread(Thread-1, started 22780)> 981
<Thread(Thread-2, started 13656)> 983
<Thread(Thread-7, started 204)> 985
<Thread(Thread-8, started 26552)> 986
<Thread(Thread-4, started 13132)> 990
<Thread(Thread-6, started 25432)> 991
<Thread(Thread-10, started 9336)> 992
<Thread(Thread-5, started 16308)> 993
<Thread(Thread-9, started 17248)> 994
sum=0
l=local()
#sum 为线程本地数据,多个线程,多个sum
def worker():
global sum
l.sum=sum
for i in range(100):
time.sleep(0.01)
l.sum+=1
print(current_thread() , l.sum)
#sum=0 每个线程开始sum=0,并且独立拥有
def worker2():
sum=0
for i in range(100):
time.sleep(0.01)
sum+=1
print(current_thread() , sum)
#存在竞争问题 ,多个进程对一个sum 变量操作
def worker3():
global sum
sum=0
for i in range(100):
time.sleep(0.001)
sum+=1
print(current_thread() , sum)
listthread = [ Thread(target=worker3) for i in range(10) ]
for t in listthread:
t.start()
for t in listthread:
t.join()
'''
线程(run 方法) 之外的变量,多个线程竞争会有临界点问题,需要注意(如 worker3 就存在多个线程操作sum ,引起错乱)
线程(run 方法) 之内的变量,为单个线程独立所拥有 (如worker2)
线程(run 方法) 之外的变量,可以通过local 线程本地数据 (如worker)
'''