1. 程式人生 > 程式設計 >python執行緒的幾種建立方式詳解

python執行緒的幾種建立方式詳解

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()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。