Python 中多程序和執行緒的區別

Manav Narula 2023年1月30日
  1. Python 中執行緒和多程序之間的區別
  2. 在 Python 中使用 multiprocessing 模組執行多程序
  3. 在 Python 中使用 threading 模組執行多執行緒
Python 中多程序和執行緒的區別

多程序和執行緒是可以通過將程式分解為更小的任務來加速程式碼執行的技術。本教程將演示 Python 中的多程序與執行緒。

Python 中執行緒和多程序之間的區別

執行緒是用來控制執行流程的指令的小彙編,一個程序可以分成幾個執行緒來提高效率。

在 Python 中,我們使用 threading 模組來執行多執行緒。一個程序通常被分成幾個執行緒來執行較小的任務。

Global Interpreter Locker (GIL) 確保執行緒不會在 Python 中並行執行,而是一個接一個地併發執行。

另一方面,多程序是一種跨多個 CPU 核心執行程序的技術。這種方法通過同時執行多個程序來實現並行性。

這些程序可能被劃分為多個執行緒,每個子程序都有自己的記憶體空間。這兩種技術都允許程式碼同時執行,並且每種方法都有其優點和缺點。

我們現在將演示兩個簡單的多程序和執行緒程式。讓我們從多程序開始。

在 Python 中使用 multiprocessing 模組執行多程序

多程序一次執行多個程序。每個程序都有自己的空間,執行互不干擾。

它有點簡單,並充分利用了 CPU 的不同核心。但是,生成多個程序需要時間和大量記憶體。

它通常用於 CPU 密集型任務。為了在 Python 中執行多程序,我們使用 multiprocessing 模組。請參閱下面的程式碼。

import multiprocessing


def fun():
    print("Sample Process")


for i in range(5):
    p = multiprocessing.Process(target=fun)
    p.start()

輸出:

Sample Process
Sample Process
Sample Process
Sample Process
Sample Process

multiprocessing.Process 建構函式在上面的示例中建立了一個 Process 類物件。target 引數用於提供程序啟動時需要執行的目標函式。

我們還可以使用 multiprocessing.Process 建構函式中的 args 引數指定一些引數。start() 方法將啟動該過程。

join() 方法可用於停止程式的執行,直到程序停止執行。

在 Python 中使用 threading 模組執行多執行緒

執行緒不需要太多記憶體,資料在多個執行緒之間共享。它們還需要很少的系統呼叫,對於 I/O 應用程式或者如果程式是網路繫結的,它們是一個很好的選擇。

執行緒使應用程式更具響應性,但執行起來可能很複雜。此外,如果單個執行緒崩潰,整個程式可能會受到影響。

Python 中可能存在競態條件;一個或多個執行緒嘗試訪問同一資源。同樣,我們使用 threading 模組在 Python 中執行多執行緒。

請參閱下面的程式碼。

import threading


def fun():
    print("Sample Thread")


for i in range(5):
    p = threading.Thread(target=fun)
    p.start()

輸出:

Sample Thread
Sample Thread
Sample Thread
Sample Thread
Sample Thread

threading.Thread 建構函式例項化 Thread 類的物件。我們像 Process 物件一樣指定 Target 函式。

start() 函式啟動執行緒。我們也可以對執行緒使用 join() 方法。此外,我們可以使用 Lock 物件來防止 Python 中的競爭條件。

作者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

相關文章 - Python Threading