多线程实例一般用法 :
def worker(msg): print ("start {0}".format(msg))
if __name__=="__main__": #----传统方式 for i in xrange(1,6): t1=threading.Thread(target=worker,args=(i,)) t1.start() t1.join()
结果:
C:\Python27\python.exe E:/untitled/Mutil/T1.py start 1 start 2 start 3 start 4 start 5
重做run函数做法:
class Mythread(threading.Thread): def __init__(self,args): super(Mythread,self).__init__() self.args=args def run(self): print ("stop{0}".format(self.args))
for x in xrange(11,16): t2=Mythread(x) t2.start() t2.join()
结果:
stop11
stop12
stop13
stop14
stop15
Process finished with exit code 0
线程锁:
与进程锁类似,两个线程先获得锁权先执行,剩下的后执行。
普通锁:
def worker(msg,lock): with lock: print ("start {0}".format(msg)) time.sleep(2) print ("end {0}".format(msg))
使用lock.aquare与lock.release:
def worker (msg,lock): lock.acquire() try: print ("start {0}".format(msg)) time.sleep(2) print ("end {0}".format(msg)) except Exception as e: raise e finally: lock.release()
主函数:
if __name__=="__main__": lock=threading.Lock() for i in xrange(1,3): t1 = threading.Thread(target=worker, args=("w1", lock)) t1.start() for x in xrange(1,4): t2 = threading.Thread(target=worker, args=("w2", lock)) t2.start()
两只作用相同执行结果一致:
C:\Python27\python.exe E:/untitled/Mutil/T2.py
start w1
end w1
start w1
end w1
start w2
end w2
start w2
end w2
start w2
end w2
Process finished with exit code 0
浙公网安备 33010602011771号