Python 多線程

分享知識  傳遞快樂

 

Python 中線程常用的有二種方式:實例化 Thread、繼承實現

Python3 線程中常用的兩個模塊爲:

  • _thread
  • threading

thread 模塊已被廢棄。用戶可以使用 threading 模塊代替。所以,在 Python3 中不能再使用"thread" 模塊。爲了兼容性,Python3 將 thread 重命名爲 "_thread"。
 

 

1、實例化 Thread

Thread 語法:

Thread(target=function, name=threadName, args)

參數說明:

  • target=<function>:要執行的函數
  • name:線程名稱
  • args=():元組中只包含一個元素時,需要在元素後面添加逗號

代碼1:

from threading import current_thread, Thread
import time

def runFun(num):
    print(num, "子線程 work", current_thread().name)
    time.sleep(2)

if __name__ == '__main__':
    my_thread = Thread(target=runFun, name="my_thread", args=(1,))
    print(my_thread.name)
    my_thread.start()  
    my_thread.join()  
    print("主線程結束")

 

2、繼承實現

開發中也是用的最多的,使用面向對象完成,利於功能的擴展。

代碼2:

from threading import Thread, current_thread
import time
from utils.PrintLine import pline


# 示例: 1 - 創建線程 - 繼承實現 
class MyThread1(Thread):

    def __init__(self, threadName, param1, param2):
        # 這句話不能少
        # name:指定線程名稱
        Thread.__init__(self, name=threadName)
        self.param1 = param1
        self.param2 = param2
    
    # 固定方法名,不能隨便起
    def run(self):
        print(self.name, ":", self.param1, "-", self.param2)
        print("Run Child Thread, name:", current_thread().name)
        time.sleep(2)


# 示例: 2 - 創建線程 - 繼承實現 
class MyThread2(Thread):

    def __init__(self, param1, param2):
        # 這句話不能少
        super(MyThread2, self).__init__()  # 重構run函數必須要寫
        self.param1 = param1
        self.param2 = param2
    
    def run(self):
        print(self.name, ":", self.param1, "-", self.param2)
        print("Run Child Thread, name:", current_thread().name)
        time.sleep(2)


if __name__ == '__main__':
    print('主線程開始')
    pline(1, "創建線程 - 繼承實現")
    t1 = MyThread1("t1", 1, 2)
    print("t1.name:", t1.name)
    t1.start()
    
    t2 = MyThread1('t2', 3, 4)
    print("t2.name:", t2.name)
    t2.start()
    
    t1.join()
    t2.join()
    pline()
    
    pline(2, "創建線程 - 繼承實現")
    t3 = MyThread2(5, 6)
    print("t3.name:", t3.name)
    t3.start()
    t3.join()
    
    t4 = MyThread2(7, 8)
    print("t4.name:", t4.name)
    t4.start()
    t4.join()
    pline()

    print('主進程結束')

注意:如果使用繼承的方式實現多線程需要在 __init__() 方法中添加以下語句(任選其一即可):

Thread.__init__(self, name=threadName)

super(MyThread2, self).__init__()  

 

 

 

 

 

——————————
如有不足請留言指正
相互學習,共同進步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章