标签:pen threading cos 计算 多线程 work 操作 UI port
1、线程锁
当我们执行多线程计算时,某些情况,会导致计算的结果,并不是我们想要的真实的结果。
例如下面的例子,预计结果sum=50,实际中多次运算的结果中,某些情况,不等于50;
import threading
import time
def worker(n):
print ("threading [%s] is begin!" % n)
global sum
sum+=1
time.sleep(2)
print ("threading [%s] is end!" % n)
start_time = time.time()
sum = 0
for i in range(50):
t = threading.Thread(target=worker,args = ("Thread-[%s]" % i,))
#t.setDaemon(True)#将子线程设置为守护线程
t.start()
print ("all is done !")
cost_time = time.time() - start_time
print (sum)
print (cost_time)
针对上面的例子,我们需要在计算的时候,添加线程锁,当填加了线程锁后,各线程在执行计算操作时,实际上变为串行
import threading
import time
def worker(n):
print ("threading [%s] is begin!" % n)
lock.acquire()
global sum
sum+=1
lock.release()
print ("threading [%s] is end!" % n)
start_time = time.time()
sum = 0
lock = threading.Lock()
#res_list = []
for i in range(50):
t = threading.Thread(target=worker,args = ("Thread-[%s]" % i,))
t.start()
#res_list.append(t)
# for t in res_list:
# t.join()
print ("all is done !")
cost_time = time.time() - start_time
print (sum)
print (cost_time)
多上述的例子来看,理论上加了锁,运行的结果,应该为想要的50,但从实际结果看,某些时候,依然运行不正确。
从结果看,有些线程未运行完成,主线程即结束了。如果加上join方法(即注释部分代码)后,多次结果的结果均为正确。
标签:pen threading cos 计算 多线程 work 操作 UI port
原文地址:http://www.cnblogs.com/wulafuer/p/7896600.html