Python 中的多執行緒

Vaibhav Vaibhav 2022年5月17日
Python 中的多執行緒

多執行緒是指在單個程序中同時執行多個執行緒的技術。併發執行旨在利用計算機系統的全部潛力,並像往常一樣更快地執行任務。

與程序相比,執行緒非常輕量級並且記憶體佔用少。由於它們非常輕量級,因此建立新執行緒是一個快速的過程。執行執行緒需要更少的系統資源(例如記憶體)來執行。

由於執行緒是程序的一部分,它們與父程序或建立它們的程序共享記憶體空間。多執行緒可能看起來太令人印象深刻了,但並不是所有的閃光都是金子。使用執行緒時必須小心,因為遇到死鎖和競爭條件是很常見的。不幸的是,由於 Python 中的 GIL 或 Global Interpreter Lock,Python 建立的執行緒提供了交錯,並按順序而不是並行執行。

人們可以在其他程式語言(如 Java)中發現真正的執行緒並行性。如果仍然需要使用 Python 從多個 CPU 核心中受益,他們應該考慮使用多處理(並行執行各種程序的技術)。

儘管如此,我們仍然可以在某種程度上在 Python 中執行多執行緒。在本文中,我們將學習如何使用 Python 執行多執行緒。

Python 中的多執行緒

我們可以使用 Python 的 threading 庫在 Python 中執行多執行緒。它是官方 Python 預裝的內建模組,旨在在 Python 中提供基於執行緒的並行性。要了解有關此模組及其提供的更多資訊,請參閱官方文件此處

現在,讓我們瞭解如何使用這個庫來執行多執行緒。請參閱以下 Python 程式碼。

import threading

class MyThread(threading.Thread):
    def __init__(self, low, high):
        super(MyThread, self).__init__()
        self.low = low
        self.high = high
        self.total = 0

    def run(self):
        for x in range(self.low, self.high):
            self.total += x
             
    def __str__(self):
        return f"Low: {self.low} | High: {self.high}"


thread_one = MyThread(0, 500000)
thread_two = MyThread(5000000, 10000000)
thread_one.start()
thread_two.start()
thread_one.join()
thread_two.join()
result = thread_one.total + thread_two.total
print("Result:", result)

輸出:

Result: 37624997250000

threading 模組提供了一個 Thread 類,表示在單獨執行緒上執行的操作。動作可以是任何東西,數學計算,對 API 端點的 POST 或 GET 請求,從預先訓練的機器學習模型中檢索一些輸出,一些繁重的分析等。

必須建立一個繼承 Thread 類的新類,就像上面 Python 程式碼中的 MyThread 類一樣。接下來,Thread 類有一個 run() 方法,該方法必須被覆蓋。此函式包含執行緒在啟用時將執行的實際任務或計算。

正如我們所見,我們已經覆蓋了上述 Python 程式碼中的 run() 函式。上面的 run() 函式基本上在類屬性 lowhigh 定義的範圍內迴圈。它將範圍內的所有整數新增到另一個類屬性 total

現在我們已經完成了對類的簡要描述,讓我們瞭解程式是如何工作的。請參閱前面的步驟。

  1. 產生或建立兩個執行緒,即 thread_onethread_two
  2. 接下來,呼叫兩個執行緒的 start() 方法。start() 方法為我們執行 run() 方法。
  3. 接下來,為兩個執行緒呼叫 join() 方法。此方法確保兩個執行緒在終止之前相互等待。假設第一個執行緒在第二個執行緒前 5 秒完成了它的任務。如果我們讓程式繼續執行,我們會遇到奇怪的錯誤,因為第二個執行緒仍然沒有完成它的任務。join() 方法確保沒有執行緒終止,除非所有其他執行緒都完成了它們的任務。
  4. 最後,將兩個執行緒的結果相加,並將結果列印到控制檯。

請注意,必須讓一個被召喚的執行緒等待其他執行緒完成它們的執行;否則,可能會遇到錯誤的結果和錯誤。

要了解有關 Thread 類的更多資訊,請在此處參閱官方文件。

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

LinkedIn GitHub