8 分鐘內掌握 Python 多線程技巧
目錄
- 什麼是多線程?
- Python 中的全局解譯器鎖定(GIL)
- 如何在 Python 中使用多線程?
- 理解 worker 函數
- 在主線程中處理用戶輸入
- 同時運行多個線程
- 使用守護線程
- 傳遞參數給函數
- 控制多個線程的執行順序
- 總結與下一步行動
🧵 什麼是多線程?
多線程是指在一個程序中同時執行多個任務或操作的能力。在 Python 中,由於全局解譯器鎖定(GIL)的存在,實際上並沒有真正的多線程。Python 的多線程是一種偽多線程,通過在不同任務之間切換執行來實現類似多線程的效果。
🔒 Python 中的全局解譯器鎖定(GIL)
全局解譯器鎖定是 CPython 解釋器所具有的一種機制,它確保在任何時候只能有一個線程執行 Python 代碼。這意味著在單個線程中執行 CPU-bound 任務時,並不能從多線程中獲得更高的性能。然而,對於 I/O-bound 任務,如網絡請求或等待用戶輸入,多線程可以提供更好的性能。
🚦 如何在 Python 中使用多線程?
要使用多線程,首先需要導入 threading 模塊。這是 Python 的一個核心模塊,無需進行額外的安裝。
import threading
此外,還需要導入 time 模塊,以便使用其中的 sleep 函數創建一些間隔。
import time
🛠 理解 worker 函數
在使用多線程之前,我們先來創建一個簡單的函數作為示例。我們將其命名為 worker,它將不斷循環並打印一個計數器的值。
def worker():
done = False
counter = 0
while not done:
time.sleep(1)
counter += 1
print(counter)
這個函數很簡單,就是一個無限循環,每隔一秒打印一個計數器的值。
⌨️ 在主線程中處理用戶輸入
現在我們想在主線程中處理用戶的輸入。我們可以通過等待用戶輸入來實現這一點。
while not done:
user_input = input("請按Enter以結束:")
done = True
這樣,當用戶輸入任何內容並按下 Enter 鍵時,我們將設置 done 變量為 True,從而退出 while 循環。
🌐 同時運行多個線程
現在,我們已經準備好使用多線程來同時運行 worker 函數和處理用戶輸入了。
首先,我們需要創建一個線程對象,並將 worker 函數作為目標。
thread = threading.Thread(target=worker)
然後,我們可以開始線程。
thread.start()
現在,worker 函數將在一個單獨的線程中運行,同時我們還可以在主線程中處理用戶輸入。
👻 使用守護線程
預設情況下,Python 中的線程都是重要的線程,這意味著即使主線程結束,所有線程都會繼續運行。
如果我們希望在主線程結束後所有線程也結束,我們可以將線程設置為守護線程。
thread.daemon = True
這樣,當主線程結束時,守護線程也將隨之結束,無需額外的處理。
🎁 傳遞參數給函數
如果我們希望在創建線程時向函數傳遞參數,我們可以在創建線程時指定這些參數。
thread = threading.Thread(target=worker, args=("ABC",))
在上面的示例中,我們將字符串 "ABC" 作為參數傳遞給 worker 函數。
🧩 控制多個線程的執行順序
如果需要等待多個線程執行完成後再繼續執行下面的代碼,我們可以使用 join 方法。
thread1 = threading.Thread(target=worker1)
thread2 = threading.Thread(target=worker2)
thread1.start()
thread2.start()
thread1.join()
thread2.join()
在上面的示例中,我們創建了兩個線程,並使用 start 方法開始它們的執行。然後,我們使用 join 方法等待這兩個線程的執行完成。
這樣,直到這兩個線程都執行完畢,我們才會繼續執行下面的代碼。
📝 總結與下一步行動
通過本文,你學會了如何在 Python 中使用多線程,並了解了如何處理用戶輸入、使用守護線程和傳遞參數給函數。下一步,你可以嘗試在實際項目中應用多線程,以提高程序的效率和性能。
不要忘記點贊、留言和訂閱我們的頻道,以便不錯過任何一個免費的未來視頻。感謝觀看,下次見,掰掰!