使用thread一直沒記錄過,最近又忘記具體用法了,記錄下
Thread()是Python標準庫中threading模塊的一個類,它可以用來創建和管理線程。線程是一種并發執行的方式,可以讓你的程序在等待某些事件的同時,執行其他的任務。例如,你可以在一個線程中訪問網絡服務,而在另一個線程中更新用戶界面。
要使用Thread(),你需要先導入threading模塊:
import threading
然后,你可以創建一個Thread對象,指定它要執行的函數和參數:
t = threading.Thread(target=func, args=(arg1, arg2, ...))
其中,target參數是一個函數對象,表示線程要執行的任務;args參數是一個元組,表示傳遞給函數的參數。
接下來,你可以調用Thread對象的start()方法,來啟動線程:
t.start()
這樣,線程就會開始運行,調用指定的函數,并傳入相應的參數。線程的運行是異步的,也就是說,它不會阻塞主線程的執行,而是在后臺進行。
如果你想要等待線程結束,你可以調用Thread對象的join()方法:
t.join()
這樣,主線程就會暫停,直到線程運行完畢。你也可以給join()方法傳入一個超時時間,表示最多等待多少秒:
t.join(timeout)
如果線程在超時時間內結束,那么join()方法會返回None;如果線程在超時時間后仍然沒有結束,那么join()方法會返回線程對象本身。
你可以通過Thread對象的屬性和方法,來獲取和控制線程的一些信息,例如:
- name: 線程的名稱,可以在創建時指定,也可以通過setName()和getName()方法修改和獲取。
- ident: 線程的標識符,是一個整數,可以通過ident屬性獲取,但不能修改。
- daemon: 線程的守護狀態,是一個布爾值,表示線程是否隨主線程退出而退出。可以在創建時指定,也可以通過setDaemon()和isDaemon()方法修改和獲取。
- alive: 線程的存活狀態,是一個布爾值,表示線程是否還在運行。可以通過is_alive()方法獲取,但不能修改。
這里是一個簡單的例子,演示了如何使用Thread()來創建和管理兩個線程,分別打印出奇數和偶數:
import threadingimport time# 定義一個函數,打印出從start到end的奇數def print_odd(start, end):for i in range(start, end + 1):if i % 2 == 1:print(i)time.sleep(0.5)# 定義一個函數,打印出從start到end的偶數def print_even(start, end):for i in range(start, end + 1):if i % 2 == 0:print(i)time.sleep(0.5)# 創建兩個線程對象,分別指定函數和參數t1 = threading.Thread(target=print_odd, args=(1, 10))t2 = threading.Thread(target=print_even, args=(1, 10))# 啟動兩個線程t1.start()t2.start()# 等待兩個線程結束t1.join()t2.join()