python中多執行緒開啟的兩種方式(內含有event的應用,即安全的機制,類似於java的等待喚醒機制,不會出現多個執行緒之間的錯亂問題)
阿新 • • 發佈:2018-12-10
event是類似於java中的等待喚醒機制,具體方法參照上一篇CSDN
下面來介紹開啟執行緒的第一種方式
#Filename:threading1.py #開啟執行緒的第一種方式 import threading import time event=threading.Event() event.set() def run(n): event.wait() event.clear() print('task',n) time.sleep(2) event.set() t1=threading.Thread(target=run,args=('t1',))#指定一個目標,指定對應的引數 t2=threading.Thread(target=run,args=('t2',))#注意後邊的逗號不可省略 t1.start() t2.start()
結果:
>>> task t1 task t2
如果沒有加入event的話,會出現亂碼的現象,我們把event註釋之後得到的結果為:
#Filename:threading1.py #開啟執行緒的第一種方式 import threading import time #event=threading.Event() #event.set() def run(n): # event.wait() # event.clear() print('task',n) time.sleep(2) # event.set() t1=threading.Thread(target=run,args=('t1',)) t2=threading.Thread(target=run,args=('t2',)) t1.start() t2.start()
結果:
>>> tasktask t1t2
下面來介紹開啟執行緒的第二種方式
#Filename:threading2.py #開啟執行緒的第二種方式,繼承的方式 import threading event=threading.Event() event.set() class mythread(threading.Thread):#繼承自threading.Thread def __init__(self,n):#初始化 super(mythread,self).__init__()#呼叫父類的初始化 self.n=n def run(self): event.wait() event.clear() print('run task',self.n) event.set() t1=mythread('t1') t2=mythread('t2') t1.start() t2.start()
結果:
>>> run task t1 run task t2