【Python】Python中的創建線程

什麼是線程

對於處理多個任務,計算機一般有兩種處理方法:一種是可以再一個應用程序內使用多個進程,每個進程負責一部分工作;另一種是使用一個進程內的多個線程。
線程(Thread)是操作系統能夠進行運算調度的最小電源。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程可以控制多個線程。比如視頻播放器,顯示畫面用一個線程,播放聲音是一個線程。只有兩個線程同時工作,我們纔可以正常觀看畫面和聲音同步的視頻

創建線程

線程是操作系統直接支持的執行單元,故大多高級語言都內置了對線程的支持。
Python的標準庫提供了兩個模塊:_thread和threading來對線程進行操作。其中_thread是低級模塊,threading是高級模塊,對_thread進行了封裝。所以絕大部分情況下我們都只需要用threading這個模塊

threading模塊提供了一個Thread類來代表一個線程對象,Thread類語法如下:

Thread([group ,target ,name, args, kwargs)

group:線程組,值爲None,如何使用後面會介紹
target:表示一個可用對象,線程啓動的時候,run()方法將會調用次對象,默認值爲None,表示不調用任何內容
name:表示當前線程的名稱,默認爲“Thread-N”
args:表示傳遞給target()函數的參數元組
kwargs:表示傳遞給target()的參數字典
Thread類的方法和創建進程用的 Process類方法十分類似

#使用threading模塊創建線程
import threading,time

def process():
    for i in range(3):
        time.sleep(1)//推遲調用線程的運行1s
        print("thread name is %s" % threading.current_thread().name)

if __name__ == '__main__':
    print("--------主線程開始----------")
    threads = [threading.Thread(target=process) for i in range(4)]  #創建四個線程存入列表
    for t in threads:
        t.start()
    for t in threads:
        t.join()
    print("----主線程結束-----")

代碼解析

上述代碼中創建了4個線程,然後分別用for循環執行了run()方法和start()方法

Tip:通過執行結果可以看出,線程的執行順序實際上的不確定的

通過繼承Thread類創建線程

繼承Thread線程類和繼承Process進程類的方法十分類似,也可以通過定義一個子類,使其繼承Thread類來創建進程
下面創建一個子類SubThread繼承Thread類,並且定義一個run()方法。實例化SubThread類創建兩個線程,並且調用start()方法開啓線程,程序會自動調用run()方法。代碼如下

#-*- coding: utf-8 -*-
import threading
import time

class SubThread(threading.Thread):
    def run(self):
        for i in range(3):
            time.sleep(1)
            msg = "子線程" + self.name + "執行,i=" + str(i)
            print(msg)


if __name__ == '__main__':
    print("主線程開始")
    t1 = SubThread()
    t2 = SubThread()
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    print("主線程結束")

運行結果如下

E:\Python\python.exe E:/PythonCode/PythonStudy/Chapter16/InheritThreadClass.py
主線程開始
子線程Thread-2執行,i=0
子線程Thread-1執行,i=0
子線程Thread-2執行,i=1
子線程Thread-1執行,i=1
子線程Thread-1執行,i=2子線程Thread-2執行,i=2

主線程結束

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