python執行緒的幾種建立方式詳解
阿新 • • 發佈:2020-01-09
Python3 執行緒中常用的兩個模組為:
- _thread
- threading(推薦使用)
使用Thread類建立
import threading from time import sleep,ctime def sing(): for i in range(3): print("正在唱歌...%d"%i) sleep(1) def dance(): for i in range(3): print("正在跳舞...%d"%i) sleep(1) if __name__ == '__main__': print('---開始---:%s'%ctime()) t1 = threading.Thread(target=sing) t2 = threading.Thread(target=dance) t1.start() t2.start() #sleep(5) # 遮蔽此行程式碼,試試看,程式是否會立馬結束? print('---結束---:%s'%ctime()) """ 輸出結果: ---開始---:Sat Aug 24 08:44:21 2019 正在唱歌...0 正在跳舞...0---結束---:Sat Aug 24 08:44:21 2019 正在唱歌...1 正在跳舞...1 正在唱歌...2 正在跳舞...2 """
說明:主執行緒會等待所有的子執行緒結束後才結束
使用Thread子類建立
為了讓每個執行緒的封裝性更完美,所以使用threading模組時,往往會定義一個新的子類class,只要繼承threading.Thread就可以了,然後重寫run方法。
import threading import time class MyThread(threading.Thread): def run(self): for i in range(3): time.sleep(1) msg = "I'm "+self.name+' @ '+str(i) #name屬性中儲存的是當前執行緒的名字 print(msg) if __name__ == '__main__': t = MyThread() t.start() """ 輸出結果: I'm Thread-5 @ 0 I'm Thread-5 @ 1 I'm Thread-5 @ 2 """
使用執行緒池ThreadPoolExecutor建立
from concurrent.futures import ThreadPoolExecutor import time import os def sayhello(a): for i in range(10): time.sleep(1) print("hello: " + a) def main(): seed = ["a","b","c"] # 最大執行緒數為3,使用with可以自動關閉執行緒池,簡化操作 with ThreadPoolExecutor(3) as executor: for each in seed: # map可以保證輸出的順序,submit輸出的順序是亂的 executor.submit(sayhello,each) print("主執行緒結束") if __name__ == '__main__': main()
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。