Python併發編程之建立多線程的幾種方法(二)

image.png

你們好,併發編程 今天開始進入第二篇。

今天的內容會比較基礎,主要是爲了讓新手也能無障礙地閱讀,因此仍是要再鞏固下基礎。學完了基礎,大家也就能很順暢地跟着個人思路理解之後的文章。編程

本文目錄

  • 學會使用函數建立多線程多線程

  • 學會使用類建立多線程併發

  • 多線程:必學函數講解ide


通過總結,Python建立多線程主要有以下兩種方法:函數

  • 函數學習

  • spa

接下來,咱們就來揭開多線程的神祕面紗。線程

學會使用函數建立多線程

在Python3中,Python提供了一個內置模塊 threading.Thread,能夠很方便地讓咱們建立多線程。code

threading.Thread() 通常接收兩個參數:blog

  • 線程函數名:要放置線程讓其後臺執行的函數,由咱們自已定義,注意不要加()

  • 線程函數的參數:線程函數名所需的參數,以元組的形式傳入。若不須要參數,能夠不指定。

舉個例子

 1import time
2from threading import Thread
3
4# 自定義線程函數。
5def main(name="Python"):
6    for i in range(2):
7        print("hello", name)
8        time.sleep(1)
9
10# 建立線程01,不指定參數
11thread_01 = Thread(target=main)
12# 啓動線程01
13thread_01.start()
14
15
16# 建立線程02,指定參數,注意逗號
17thread_02 = Thread(target=main, args=("MING",))
18# 啓動線程02
19thread_02.start()

能夠看到輸出

1hello Python
2hello MING
3hello Python
4hello MING

是否是超級簡單呢?別急,下面也是同樣簡單。

學會使用類建立多線程

相比較函數而言,使用類建立線程,會比較麻煩一點。

首先,咱們要自定義一個類,對於這個類有兩點要求,

  • 必須繼承 threading.Thread 這個父類;

  • 必須覆寫 run 方法。

這裏的 run 方法,和咱們上面線程函數的性質是同樣的,能夠寫咱們的業務邏輯程序。在 start() 後將會調用。

來看一下例子
爲了方便對比,run函數我複用上面的main

 1import time
2from threading import Thread
3
4class MyThread(Thread):
5    def __init__(self, name="Python"):
6        # 注意,super().__init__() 必定要寫
7        # 並且要寫在最前面,不然會報錯。
8        super().__init__()
9        self.name=name
10
11    def run(self):
12        for i in range(2):
13            print("hello", self.name)
14            time.sleep(1)
15
16if __name__ == '__main__':
17    # 建立線程01,不指定參數
18    thread_01 = MyThread()
19    # 建立線程02,指定參數
20    thread_02 = MyThread("MING")
21
22    thread_01.start()
23    thread_02.start()

固然結果也是同樣的。

1hello Python
2hello MING
3hello Python
4hello MING

多線程:必學函數講解

學完了兩種建立線程的方式,你必定會驚歎,咋麼這麼簡單,一點難度都沒有。

其實否則,上面咱們的線程函數 爲了方便理解,都使用的最簡單的代碼邏輯。而在實際使用當中,多線程運行期間,還會出現諸多問題,只是咱們如今還沒體會到它的複雜而已。

不過,你也沒必要擔憂,在後面的章節中,我會帶着你們一塊兒來探討一下,都有哪些難題,應該如何解決。

磨刀不誤吹柴工,咱們首先得來認識一下,Python給咱們提供的Thread 都有哪些函數和屬性,實現哪些功能。學習完這些,在後期的學習中,咱們才能更加得以應手。

通過個人總結,大約經常使用的方法有以下這些:

 1t=Thread(target=func)
2
3# 啓動子線程
4t.start()
5
6# 阻塞子線程,待子線程結束後,再往下執行
7t.join()
8
9# 判斷線程是否在執行狀態,在執行返回True,不然返回False
10t.is_alive()
11t.isAlive()
12
13# 設置線程是否隨主線程退出而退出,默認爲False
14t.daemon = True
15t.daemon = False
16
17# 設置線程名
18t.name = "My-Thread"

好了,Python線程基礎知識,咱們大概都介紹完了。

相關文章
相關標籤/搜索