今天小编就为大家分享一篇python多线程共享变量的使用和效率方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
python多线程可以使任务得到并发执行,但是有时候在执行多次任务的时候,变量出现“意外”。
import threading,time
n=0
start=time.time()
def b1(num):
global n
n=n+num
n=n-num
def b2(num):
for i in range(1000000):
b1(num)
t1=threading.Thread(target=b2,args=(5,))
t2=threading.Thread(target=b2,args=(8,))
t1.start()
t2.start()
t1.join()
t2.join()
end=time.time()
print(n)
print(end-start)
执行结果:
18
0.7520430088043213
可见变量n从0变成了18,用时是0.75s,原因是计算机系统计算类似n=n+num是分两步计算的,先计算n+num的值放进内存中,然后再把计算的值赋值给n,正是这个间隙导致了变量出现“意外”。
这时候可以使用threading.Lock来把线程中的变量锁定,使用完再释放!
import threading,time
n=0
lock=threading.Lock()
start=time.time()
def b1(num):
global n
n=n+num
n=n-num
def b2(num):
for i in range(1000000):
lock.a