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


大家好,並發編程 進入第二篇。

今天的內容會比較基礎,主要是為了讓新手也能無障礙地閱讀,所以還是要再鞏固下基礎。學完了基礎,你們也就能很順暢地跟着我的思路理解以后的文章。

本文目錄

  • 學會使用函數創建多線程
  • 學會使用類創建多線程
  • 多線程:必學函數講解

經過總結,Python創建多線程主要有如下兩種方法:

  • 函數

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

. 學會使用函數創建多線程

在Python3中,Python提供了一個內置模塊 threading.Thread,可以很方便地讓我們創建多線程。

threading.Thread() 一般接收兩個參數:

  • 線程函數名:要放置線程讓其后台執行的函數,由我們自已定義,注意不要加()
  • 線程函數的參數:線程函數名所需的參數,以元組的形式傳入。若不需要參數,可以不指定。

舉個例子

 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線程基礎知識,我們大概都介紹完了。

從下一章開始,我們就開始接觸多線程里比較難的知識點啦,是不是有點小期待呢?


 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM