[Python教學] 進階:平行程式設計

更新於 發佈於 閱讀時間約 7 分鐘

在這篇文章中,我們將深入探討 Python 中的平行程式設計,特別是使用 threading 和 multiprocessing 模組來實現多執行緒和多進程的應用。這些技術可以幫助我們充分利用現代 CPU 的多核心架構,提高程式的執行效率。

什麼是平行程式設計?

平行程式設計是一種同時執行多個計算任務的技術,常用於提升應用程式的效能。在 Python 中,主要有兩種方式來實現平行:多執行緒 (Multithreading) 和 多進程 (Multiprocessing)

  • 多執行緒:適合 I/O 密集型任務,例如網路請求或檔案讀寫。
  • 多進程:適合 CPU 密集型任務,例如數據處理或計算密集型工作。

使用 threading 模組

threading 模組是 Python 標準庫的一部分,提供了創建和管理執行緒的功能。

基本方式

以下是使用 threading 模組的基本範例:

import threading
import time

# 子執行緒的工作函數
def job(num):
print(f"Thread {num} starting")
time.sleep(2)
print(f"Thread {num} finished")

# 建立和啟動子執行緒
threads = []
for i in range(5):
t = threading.Thread(target=job, args=(i,))
threads.append(t)
t.start()

# 等待所有子執行緒結束
for t in threads:
t.join()

print("All threads finished.")

在這個範例中,我們定義了一個名為 job 的函數,然後創建了五個子執行緒,每個執行緒都會呼叫這個函數。使用 t.join() 確保主執行緒在所有子執行緒完成之前不會結束。

物件導向方式

我們也可以使用物件導向的方法來創建執行緒:

import threading
import time

class MyThread(threading.Thread):
def __init__(self, num):
super().__init__()
self.num = num

def run(self):
print(f"Thread {self.num} starting")
time.sleep(2)
print(f"Thread {self.num} finished")

threads = []
for i in range(5):
thread = MyThread(i)
threads.append(thread)
thread.start()

for thread in threads:
thread.join()

print("All threads finished.")

在這裡,我們創建了一個繼承自 threading.Thread 的類別,並重寫了 run 方法來定義每個執行緒的工作。


使用 multiprocessing 模組

multiprocessing 模組也屬於 Python 標準庫,它允許我們創建獨立的進程,每個進程都有自己的 Python 解釋器,這樣可以繞過 GIL(全局解釋器鎖)的限制。

基本方式

import multiprocessing
import time

def worker(num):
print(f"Process {num} starting")
time.sleep(2)
print(f"Process {num} finished")

if __name__ == "__main__":
processes = []
for i in range(5):
p = multiprocessing.Process(target=worker, args=(i,))
processes.append(p)
p.start()

for p in processes:
p.join()

print("All processes finished.")

在這段程式碼中,我們使用 multiprocessing.Process 創建了五個獨立的進程,每個進程都會執行 worker 函數。

使用進程池方式

對於需要創建大量進程的情況,可以使用進程池來管理進程:

import multiprocessing
import time

def worker(num):
print(f"Process {num} starting")
time.sleep(2)
print(f"Process {num} finished")

if __name__ == "__main__":
with multiprocessing.Pool(processes=5) as pool:
pool.map(worker, range(5))

print("All processes finished.")

這裡,我們使用 Pool 來創建一組工作進程,並使用 map 方法將任務分配給這些進程。

多執行緒 vs. 多進程

raw-image


選擇建議

  • 如果你的應用主要是 I/O 密集型,例如網路請求或檔案操作,則應選擇 多執行緒
  • 如果你的應用需要大量計算,則應選擇 多進程 以充分利用 CPU 核心。

結論

在 Python 中,使用 threading 和 multiprocessing 模組可以有效地實現並行處理。根據任務的特性選擇合適的方法,可以顯著提高程式的性能。希望這篇文章能幫助你理解如何在 Python 中實現平行程序設計!


留言
avatar-img
留言分享你的想法!
avatar-img
追極光的北極熊|軟體工程師的小天地
9會員
156內容數
歡迎來到我的部落格!這裡記錄了軟體工程師的日常生活點滴,並分享程式設計與演算法的實用教學。無論你是初學者還是有經驗的開發者,都能在這裡找到深入淺出的技術解析與實戰技巧。此外,我也會分享工作中的心路歷程與學習心得,讓你不僅學到技術,更能瞭解軟體開發的實際應用與挑戰。希望透過這個平台,能與你共同成長,激發對技術的熱情!
2025/04/28
當我們開發程式時,功能能正常運作固然重要,但在資料量變大或執行時間變長時,效能就成為不可忽視的一環。尤其在 Web 應用、資料分析或科學運算中,程式跑得快與否,直接影響使用者體驗與系統成本。
2025/04/28
當我們開發程式時,功能能正常運作固然重要,但在資料量變大或執行時間變長時,效能就成為不可忽視的一環。尤其在 Web 應用、資料分析或科學運算中,程式跑得快與否,直接影響使用者體驗與系統成本。
2025/04/22
嘿,大家好!上篇教學文章我們做出了一個待辦事項清單,已經有點小工具的感覺了吧?今天我們要再升級,來做個「簡單記事本」。這個專案不只可以寫東西,還能存檔、讀檔,甚至換字體大小,感覺就像自己寫了個迷你軟體!
2025/04/22
嘿,大家好!上篇教學文章我們做出了一個待辦事項清單,已經有點小工具的感覺了吧?今天我們要再升級,來做個「簡單記事本」。這個專案不只可以寫東西,還能存檔、讀檔,甚至換字體大小,感覺就像自己寫了個迷你軟體!
2025/04/16
嘿,大家好!走到這一步,我們已經玩過 Tkinter 的基本招式、佈局、事件處理,還搞了些進階元件,應該有點信心了吧?今天我們要把這些功夫練成一套連招,來做個實用的「待辦事項清單」(To-Do List),順便聊聊怎麼把程式寫得更漂亮、更好用。準備好了嗎?這就上場啦!
2025/04/16
嘿,大家好!走到這一步,我們已經玩過 Tkinter 的基本招式、佈局、事件處理,還搞了些進階元件,應該有點信心了吧?今天我們要把這些功夫練成一套連招,來做個實用的「待辦事項清單」(To-Do List),順便聊聊怎麼把程式寫得更漂亮、更好用。準備好了嗎?這就上場啦!
看更多
你可能也想看
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
多核心,是指單個積體電路中建置兩個或以上的獨立實體中央處理單元(Core),這些Core可以分別獨立地執行程式指令,以平行運算的概念加快程式執行速度。 本章節將大概介紹有關此單元相關的一些知識內容。
Thumbnail
多核心,是指單個積體電路中建置兩個或以上的獨立實體中央處理單元(Core),這些Core可以分別獨立地執行程式指令,以平行運算的概念加快程式執行速度。 本章節將大概介紹有關此單元相關的一些知識內容。
Thumbnail
從實際應用中學習 Python 程式設計,提升技能並建立作品集。文章提供八個循序漸進的 Python 專案範例,涵蓋檔案操作、網路爬蟲、Web 應用、自動化腳本、數據分析、遊戲開發、API 互動及應用程式部署,並附上實戰建議及學習資源。
Thumbnail
從實際應用中學習 Python 程式設計,提升技能並建立作品集。文章提供八個循序漸進的 Python 專案範例,涵蓋檔案操作、網路爬蟲、Web 應用、自動化腳本、數據分析、遊戲開發、API 互動及應用程式部署,並附上實戰建議及學習資源。
Thumbnail
在這篇文章中,我們將深入探討 Python 中的平行程式設計,特別是使用 threading 和 multiprocessing 模組來實現多執行緒和多進程的應用。這些技術可以幫助我們充分利用現代 CPU 的多核心架構,提高程式的執行效率。
Thumbnail
在這篇文章中,我們將深入探討 Python 中的平行程式設計,特別是使用 threading 和 multiprocessing 模組來實現多執行緒和多進程的應用。這些技術可以幫助我們充分利用現代 CPU 的多核心架構,提高程式的執行效率。
Thumbnail
深入探討操作系統和中央處理單元 (CPU) 的基本概念,涵蓋 OS 的功能、CPU 的運作,以及程式與執行緒的管理。透過生動的比喻,讀者能夠更輕鬆地理解複雜的硬體運作機制,包括記憶體管理和行程間的通訊。本文為想了解計算機科學的讀者提供了一個清晰的入門指南,讓他們掌握多程式協調與虛擬化技術的基本知識。
Thumbnail
深入探討操作系統和中央處理單元 (CPU) 的基本概念,涵蓋 OS 的功能、CPU 的運作,以及程式與執行緒的管理。透過生動的比喻,讀者能夠更輕鬆地理解複雜的硬體運作機制,包括記憶體管理和行程間的通訊。本文為想了解計算機科學的讀者提供了一個清晰的入門指南,讓他們掌握多程式協調與虛擬化技術的基本知識。
Thumbnail
在寫程式時,重複執行指令是常見需求。Python 提供了兩種迴圈結構:for-in 迴圈和 while 迴圈。for-in 迴圈適合已知迴圈次數或進行容器迭代;while 迴圈則用於不確定迴圈次數的情境。本文將介紹這兩種迴圈的基本用法及練習範例。
Thumbnail
在寫程式時,重複執行指令是常見需求。Python 提供了兩種迴圈結構:for-in 迴圈和 while 迴圈。for-in 迴圈適合已知迴圈次數或進行容器迭代;while 迴圈則用於不確定迴圈次數的情境。本文將介紹這兩種迴圈的基本用法及練習範例。
Thumbnail
本文介紹了Python中的 if-elif 和else關鍵字的使用,構建分支結構的方式,以及巢狀結構的概念。文章中還提到Python編碼的最佳實踐,建議儘可能使用扁平化的結構而不是巢狀結構以提高可讀性。
Thumbnail
本文介紹了Python中的 if-elif 和else關鍵字的使用,構建分支結構的方式,以及巢狀結構的概念。文章中還提到Python編碼的最佳實踐,建議儘可能使用扁平化的結構而不是巢狀結構以提高可讀性。
Thumbnail
接下來,我們會藉由繼承(inheritance)和多型(polymorphism)這兩個物件導向程式設計的技術,來製作更多樣化、更有趣的粒子系統。
Thumbnail
接下來,我們會藉由繼承(inheritance)和多型(polymorphism)這兩個物件導向程式設計的技術,來製作更多樣化、更有趣的粒子系統。
Thumbnail
Python是一款多功能且易於學習的程式語言,廣泛用於Web開發、數據分析和人工智能。學習起來有其挑戰性,但初學者可在短時間內體驗到成就感。市場對Python需求旺盛,成為職場上的重要技能。我們的課程提供從Python到PHP的全面學習,並重點教授實戰技巧如爬蟲和資料視覺化。現是投身編程的絕佳時機。
Thumbnail
Python是一款多功能且易於學習的程式語言,廣泛用於Web開發、數據分析和人工智能。學習起來有其挑戰性,但初學者可在短時間內體驗到成就感。市場對Python需求旺盛,成為職場上的重要技能。我們的課程提供從Python到PHP的全面學習,並重點教授實戰技巧如爬蟲和資料視覺化。現是投身編程的絕佳時機。
Thumbnail
最近在調整跟優化效能時,又來複習了 Multi-threading 和 Multiprocessing 的概念,在面對大數據時,能夠有效利用多核心處理器的能力,對於提升程式執行效能至關重要。 Python 提供多線程(Multi-threading) 和多進程 (Multiprocessing)
Thumbnail
最近在調整跟優化效能時,又來複習了 Multi-threading 和 Multiprocessing 的概念,在面對大數據時,能夠有效利用多核心處理器的能力,對於提升程式執行效能至關重要。 Python 提供多線程(Multi-threading) 和多進程 (Multiprocessing)
Thumbnail
Python 是一個易於學習且功能強大的高級程式語言,它廣泛用於軟件開發、數據科學、人工智能和網站開發等領域。本教學將帶您入門 Python,讓您了解基本語法和常用功能。讓我們開始吧!
Thumbnail
Python 是一個易於學習且功能強大的高級程式語言,它廣泛用於軟件開發、數據科學、人工智能和網站開發等領域。本教學將帶您入門 Python,讓您了解基本語法和常用功能。讓我們開始吧!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News