一文速通 Python 并行計算:教程總結
摘要:
本教程是一個系統性的 Python 并行計算實戰指南,它從并行計算的基本概念出發,循序漸進地深入講解了 Python 中實現并發的三大核心范式:多線程、多進程和異步編程。它不僅詳細剖析了多線程的 GIL 機制、各種同步原語(鎖、信號量、條件變量等)和通信方式(隊列),還清晰地對比了多進程在突破 GIL 限制、實現真正并行計算上的優勢,涵蓋了進程間數據共享與通信的多種方案(共享內存、管理器、管道)。最后,教程引入了現代的異步編程模型,解釋了事件循環和協程如何高效處理高 I/O 密集型任務。整個系列結構清晰,由淺入深,為開發者提供了從理論到實踐的完整知識體系,是快速掌握并運用 Python 提升程序性能的優質教程。
關于我們更多介紹可以查看云文檔:Freak 嵌入式工作室云文檔,或者訪問我們的 wiki:****https://github.com/leezisheng/Doc/wik
原文鏈接:
FreakStudio的博客
往期推薦:
學嵌入式的你,還不會面向對象??!
全網最適合入門的面向對象編程教程:00 面向對象設計方法導論
全網最適合入門的面向對象編程教程:01 面向對象編程的基本概念
全網最適合入門的面向對象編程教程:02 類和對象的 Python 實現-使用 Python 創建類
全網最適合入門的面向對象編程教程:03 類和對象的 Python 實現-為自定義類添加屬性
全網最適合入門的面向對象編程教程:04 類和對象的Python實現-為自定義類添加方法
全網最適合入門的面向對象編程教程:05 類和對象的Python實現-PyCharm代碼標簽
全網最適合入門的面向對象編程教程:06 類和對象的Python實現-自定義類的數據封裝
全網最適合入門的面向對象編程教程:07 類和對象的Python實現-類型注解
全網最適合入門的面向對象編程教程:08 類和對象的Python實現-@property裝飾器
全網最適合入門的面向對象編程教程:09 類和對象的Python實現-類之間的關系
全網最適合入門的面向對象編程教程:10 類和對象的Python實現-類的繼承和里氏替換原則
全網最適合入門的面向對象編程教程:11 類和對象的Python實現-子類調用父類方法
全網最適合入門的面向對象編程教程:12 類和對象的Python實現-Python使用logging模塊輸出程序運行日志
全網最適合入門的面向對象編程教程:13 類和對象的Python實現-可視化閱讀代碼神器Sourcetrail的安裝使用
全網最適合入門的面向對象編程教程:全網最適合入門的面向對象編程教程:14 類和對象的Python實現-類的靜態方法和類方法
全網最適合入門的面向對象編程教程:15 類和對象的 Python 實現-__slots__魔法方法
全網最適合入門的面向對象編程教程:16 類和對象的Python實現-多態、方法重寫與開閉原則
全網最適合入門的面向對象編程教程:17 類和對象的Python實現-鴨子類型與“file-like object“
全網最適合入門的面向對象編程教程:18 類和對象的Python實現-多重繼承與PyQtGraph串口數據繪制曲線圖
全網最適合入門的面向對象編程教程:19 類和對象的 Python 實現-使用 PyCharm 自動生成文件注釋和函數注釋
全網最適合入門的面向對象編程教程:20 類和對象的Python實現-組合關系的實現與CSV文件保存
全網最適合入門的面向對象編程教程:21 類和對象的Python實現-多文件的組織:模塊module和包package
全網最適合入門的面向對象編程教程:22 類和對象的Python實現-異常和語法錯誤
全網最適合入門的面向對象編程教程:23 類和對象的Python實現-拋出異常
全網最適合入門的面向對象編程教程:24 類和對象的Python實現-異常的捕獲與處理
全網最適合入門的面向對象編程教程:25 類和對象的Python實現-Python判斷輸入數據類型
全網最適合入門的面向對象編程教程:26 類和對象的Python實現-上下文管理器和with語句
全網最適合入門的面向對象編程教程:27 類和對象的Python實現-Python中異常層級與自定義異常類的實現
全網最適合入門的面向對象編程教程:28 類和對象的Python實現-Python編程原則、哲學和規范大匯總
全網最適合入門的面向對象編程教程:29 類和對象的Python實現-斷言與防御性編程和help函數的使用
全網最適合入門的面向對象編程教程:30 Python的內置數據類型-object根類
全網最適合入門的面向對象編程教程:31 Python的內置數據類型-對象Object和類型Type
全網最適合入門的面向對象編程教程:32 Python的內置數據類型-類Class和實例Instance
全網最適合入門的面向對象編程教程:33 Python的內置數據類型-對象Object和類型Type的關系
全網最適合入門的面向對象編程教程:34 Python的內置數據類型-Python常用復合數據類型:元組和命名元組
全網最適合入門的面向對象編程教程:35 Python的內置數據類型-文檔字符串和__doc__屬性
全網最適合入門的面向對象編程教程:36 Python的內置數據類型-字典
全網最適合入門的面向對象編程教程:37 Python常用復合數據類型-列表和列表推導式
全網最適合入門的面向對象編程教程:38 Python常用復合數據類型-使用列表實現堆棧、隊列和雙端隊列
全網最適合入門的面向對象編程教程:39 Python常用復合數據類型-集合
全網最適合入門的面向對象編程教程:40 Python常用復合數據類型-枚舉和enum模塊的使用
全網最適合入門的面向對象編程教程:41 Python常用復合數據類型-隊列(FIFO、LIFO、優先級隊列、雙端隊列和環形隊列)
全網最適合入門的面向對象編程教程:42 Python常用復合數據類型-collections容器數據類型
全網最適合入門的面向對象編程教程:43 Python常用復合數據類型-擴展內置數據類型
全網最適合入門的面向對象編程教程:44 Python內置函數與魔法方法-重寫內置類型的魔法方法
全網最適合入門的面向對象編程教程:45 Python實現常見數據結構-鏈表、樹、哈希表、圖和堆
全網最適合入門的面向對象編程教程:46 Python函數方法與接口-函數與事件驅動框架
全網最適合入門的面向對象編程教程:47 Python函數方法與接口-回調函數Callback
全網最適合入門的面向對象編程教程:48 Python函數方法與接口-位置參數、默認參數、可變參數和關鍵字參數
全網最適合入門的面向對象編程教程:49 Python函數方法與接口-函數與方法的區別和lamda匿名函數
全網最適合入門的面向對象編程教程:50 Python函數方法與接口-接口和抽象基類
全網最適合入門的面向對象編程教程:51 Python函數方法與接口-使用Zope實現接口
全網最適合入門的面向對象編程教程:52 Python函數方法與接口-Protocol協議與接口
全網最適合入門的面向對象編程教程:53 Python字符串與序列化-字符串與字符編碼
全網最適合入門的面向對象編程教程:54 Python字符串與序列化-字符串格式化與format方法
全網最適合入門的面向對象編程教程:55 Python字符串與序列化-字節序列類型和可變字節字符串
全網最適合入門的面向對象編程教程:56 Python字符串與序列化-正則表達式和re模塊應用
全網最適合入門的面向對象編程教程:57 Python字符串與序列化-序列化與反序列化
全網最適合入門的面向對象編程教程:58 Python字符串與序列化-序列化Web對象的定義與實現
全網最適合入門的面向對象編程教程:59 Python并行與并發-并行與并發和線程與進程
一文速通Python并行計算:00 并行計算的基本概念
一文速通Python并行計算:01 Python多線程編程-基本概念、切換流程、GIL鎖機制和生產者與消費者模型
一文速通Python并行計算:02 Python多線程編程-threading模塊、線程的創建和查詢與守護線程
一文速通Python并行計算:03 Python多線程編程-多線程同步(上)—基于互斥鎖、遞歸鎖和信號量
一文速通Python并行計算:04 Python多線程編程-多線程同步(下)—基于條件變量、事件和屏障
一文速通Python并行計算:05 Python多線程編程-線程的定時運行
一文速通Python并行計算:06 Python多線程編程-基于隊列進行通信
一文速通Python并行計算:07 Python多線程編程-線程池的使用和多線程的性能評估
一文速通Python并行計算:08 Python多進程編程-進程的創建命名、獲取ID、守護進程的創建和終止進程
一文速通Python并行計算:09 Python多進程編程-進程之間的數據同步-基于互斥鎖、遞歸鎖、信號量、條件變量、事件和屏障
一文速通Python并行計算:10 Python多進程編程-進程之間的數據共享-基于共享內存和數據管理器
一文速通Python并行計算:11 Python多進程編程-進程之間的數據安全傳輸-基于隊列和管道
一文速通Python并行計算:12 Python多進程編程-進程池Pool
一文速通Python并行計算:13 Python異步編程-基本概念與事件循環和回調機制
一文速通Python并行計算:14 Python異步編程-協程的管理和調度
更多精彩內容可看:
C語言一點五編程實戰:純 C 的模塊化×繼承×多態框架
給你的 Python 加加速:一文速通 Python 并行計算
一文搞懂 CM3 單片機調試原理
肝了半個月,嵌入式技術棧大匯總出爐
電子計算機類比賽的“武林秘籍”
一個MicroPython的開源項目集錦:awesome-micropython,包含各個方面的Micropython工具庫
Avnet ZUBoard 1CG開發板—深度學習新選擇
工程師不要迷信開源代碼,還要注重基本功
什么?配色個性化的電機驅動模塊?!!
什么?XIAO主控新出三款擴展板!
手把手教你實現Arduino發布第三方庫
萬字長文手把手教你實現MicroPython/Python發布第三方庫
一文速通電子設計大賽,電子人必看的獲獎秘籍
一文速通光電設計大賽,電子人必看!
工科比賽“無腦”操作指南:知識學習硬件選購→代碼調試→報告撰寫的保姆級路線圖
單場會議拍攝收費6000+?拍攝技巧和步驟都在這里
0基礎如何沖擊大唐杯國獎?學姐的的備賽心得都在這里
爆肝整理長文】大學生競賽速通指南:選題 × 組隊 × 路演 48 小時備賽搞定
當代大學生競賽亂象:從“內卷”到“祖傳項目”的生存指南
女大學生擺攤虧損5000元踩點實錄:成都哪里人最多、最容易賺到錢?我告訴你!
用拍立得在成都網紅打卡點賺錢:一份超實用地攤級旅游副業教程
成都印象:一個電子女孩親手做了點浪漫
普通繼電器 vs 磁保持繼電器 vs MOS管:工作原理與電路設計全解析
告別TP4056!國產SY3501D單芯片搞定充放電+升壓,僅需7個元件!附開源PCB文件
POB面向老板編程—現實驅動的新型編程范式
文檔獲取:
可訪問如下鏈接進行對文檔下載:
https://github.com/leezisheng/Doc
該文檔是一份關于 并行計算 和 Python 并發編程 的學習指南,內容涵蓋了并行計算的基本概念、Python 多線程編程、多進程編程以及協程編程的核心知識點:
正文
00 并行計算的基本概念
本文系統介紹了并行計算的基礎知識。首先比較了串行計算與并行計算的區別,說明了并行計算的基本特點。隨后介紹了并行計算中的關鍵概念,包括任務并行、數據并行、并行度、并行算法與并行編程等。接著闡述了學習并行計算的主要內容,如并行算法與編程模型、性能優化方法和常見挑戰。本文還對幾種典型的并行編程模型(共享內存、消息傳遞、數據并行、任務并行)進行了說明,并討論了并行程序的性能評價方法,包括并行效率、加速比和 Amdahl 定律。最后,本文給出了學習并行編程所需的環境配置,提供了 Python 與相關工具的使用建議。
01 Python 多線程編程-基本概念、切換流程、GIL 鎖機制和生產者與消費者模型文速通 Python 并行計算
本文主要介紹了 Python 中多線程的基本概念與應用。首先解釋了多線程的優勢,如提升程序運行效率、改善用戶體驗以及更好地利用資源,并指出了線程與進程的區別。接著,本文詳細說明了 Python 中線程的定義、線程的不同狀態及其切換流程,幫助理解線程在創建、就緒、運行、阻塞和死亡等階段的行為。同時,本文還重點講解了 Python 的全局解釋器鎖(GIL)機制及其對多線程性能的影響,分析了多線程在 I/O 密集型與 CPU 密集型任務中的不同表現。最后,本文引入了經典的生產者–消費者模型,闡述了緩沖區、生產者、消費者、互斥鎖和條件變量等要素,為后續深入學習 Python 多線程編程奠定了基礎。
02 Python 多線程編程-threading 模塊、線程的創建和查詢與守護線程
本文介紹了 Python3 中的 threading
模塊及其在多線程編程中的應用。首先說明了 threading
模塊的作用和常用組件,如 Thread
、Lock
、RLock
、Condition
、Event
、Semaphore
等。接著重點講解了兩種線程創建方式:通過調用 Thread
類的構造方法,以及通過繼承 Thread
類并重寫 run()
方法。隨后,本文展示了線程的常用操作,包括獲取線程名、判斷線程是否存活、使用 join()
控制線程執行順序等。最后,還介紹了守護線程的使用方法,說明了其與主線程之間的關系。
03 Python 多線程編程-多線程同步(上)一基于互斥鎖、遞歸鎖和信號量
本文主要介紹了 Python 多線程中的線程同步機制。首先說明了多線程訪問共享資源時可能出現的競爭條件和線程不安全問題,并通過示例直觀展示了數據不一致的情況。隨后,介紹了多種常見的同步手段:使用 互斥鎖 (Lock) 保證資源訪問的互斥性,同時指出其可能引發的死鎖風險;使用 遞歸鎖 (RLock) 解決同一線程內多次加鎖造成的嵌套死鎖問題;以及使用 信號量 (Semaphore / BoundedSemaphore) 協調多線程對有限資源的訪問,并通過生產者–消費者模型進行說明。這些方法共同構成了 Python 多線程編程中實現線程安全的重要基礎。
04 Python 多線程編程-多線程同步(下)一基于條件變量、事件和屏障
本文介紹了 Python 中的高級線程同步機制,分別是 條件變量 (Condition)、事件 (Event) 和 屏障 (Barrier)。條件變量常用于解決復雜的線程協作問題,例如生產者–消費者模型,通過 wait()
與 notify()
實現精確的條件喚醒;事件機制通過 set()
與 wait()
來控制線程運行時機,適合資源準備完成后統一喚醒多個線程的場景;屏障則用于多個線程之間的相互等待,確保所有線程到達同步點后再繼續執行。三者結合,能夠有效應對多線程編程中更復雜的同步需求。
05 Python 多線程編程-線程的定時運行
本文介紹了 Python 中實現定時任務的多種方式。首先使用 threading.Timer
實現簡單的延時或周期任務;隨后利用標準庫 sched
進行一次性任務調度;再通過 threading.Event
實現可隨時終止的周期任務;最后介紹了功能強大的第三方庫 APScheduler,它支持多種調度方式,包括間隔執行、特定時間執行和 Cron 表達式調度,適合復雜的定時需求。通過對比,可以發現不同方法適用于不同場景,從輕量級到企業級應用均可覆蓋。
06 Python 多線程編程-基于隊列進行通信
本文介紹了 Python 中隊列的基本概念和常見實現方式。首先通過 queue.Queue
演示了生產者-消費者模型,接著討論了在“慢速生產-快速消費”場景下的解決方法;隨后展示了先進后出隊列 LifoQueue
的用法;最后介紹了帶優先級的 PriorityQueue
,它可以根據優先級順序取出元素,適合任務調度等場景。通過這些示例,可以全面了解隊列在 Python 多線程編程中的不同應用。
07 Python 多線程編程-線程池的使用和多線程的性能評估
本文首先介紹了線程池的基本概念及其在提升性能、控制并發數量方面的優勢,并重點講解了 ThreadPoolExecutor
的常用方法和 Future
對象的使用方式,包括任務提交、結果獲取、回調函數及 map
方法等典型用法,展示了線程池在簡化并發編程中的便利性。隨后,文章還通過工具 VizTracer 對多線程性能進行了評估,說明了全局解釋器鎖(GIL)對 Python 多線程并行執行的影響,并演示了如何利用可視化分析工具對多線程程序的執行過程進行深入分析。
08 Python 多進程編程-進程的創建命名、獲取 ID、守護進程的創建和終止進程
本文介紹了 Python 中的 multiprocessing
模塊及其在充分利用多核 CPU 資源時的重要作用。文章首先講解了如何通過 Process
類創建和啟動子進程,包括直接調用構造器和繼承 Process
類兩種方式;接著展示了進程命名與 PID 獲取的方法,以便在調試和管理時更直觀。隨后,文章還介紹了守護進程的概念及其實現方式,說明了后臺進程隨主進程退出的特點;最后,講解了進程的終止與生命周期管理,包括 terminate()
、is_alive()
與 exitcode
的使用。這些內容共同構成了 Python 多進程編程的核心基礎。
09 Python 多進程編程-進程之間的數據同步-基于互斥鎖、遞歸鎖、信號量、條件變事件和屏障
本文介紹了 Python multiprocessing
模塊中進程同步的常用機制。由于進程間數據默認獨立,但會共享文件系統,若不加控制會出現競爭與錯亂,因此需要同步原語來協調。文章依次講解了 互斥鎖(Lock)、遞歸鎖(RLock)、信號量(Semaphore)、條件變量(Condition)、事件(Event) 以及 屏障(Barrier) 的使用方法與應用場景,并配合示例代碼展示了它們在多進程下的同步效果。通過這些同步工具,可以有效避免資源競爭、保障進程間協作的正確性。
10 Python 多進程編程-進程之間的數據共享-基于共享內存和數據管理器
本文介紹了 Python multiprocessing
模塊中進程間數據共享的實現方法。首先講解了 共享內存 的用法,包括 Value
和 Array
兩種基礎數據類型共享方式,以及基于 ctypes
定義的自定義結構體,實現多個進程間的高效數據交換。共享內存具有讀寫高效、無需數據拷貝的優勢,但需要配合同步機制避免數據沖突。隨后,文章介紹了 數據管理器(Manager),它通過服務進程維護共享對象,支持 dict
、list
等多種常見數據結構,并允許不同進程協同修改同一份數據。相比共享內存,Manager 使用更靈活,適合復雜對象的共享。
11 Python 多進程編程-進程之間的數據安全傳輸-基于隊列和管道
本文介紹了 Python multiprocessing
模塊中進程間通信(IPC)的兩種主要方式:隊列(Queue / JoinableQueue) 和 管道(Pipe)。其中,隊列支持多生產者-多消費者模型,具有進程安全特性,并提供了 put
、get
等常用方法,以及 JoinableQueue
的 task_done
和 join
來簡化任務完成的通知機制;管道則提供了更底層的通信方式,效率高于隊列,適合兩個進程之間的雙向數據交換。文章通過示例演示了這兩種通信機制的使用方法,并說明了各自的應用場景與注意事項。
12 Python 多進程編程-進程池 Pool
本文介紹了 Python multiprocessing
模塊中的進程池(Pool)機制。進程池用于管理一組工作進程,避免頻繁創建和銷毀進程帶來的開銷,提高并行任務處理效率。Pool 提供同步方法(如 apply
、map
)和異步方法(如 apply_async
、map_async
),分別適用于需要阻塞等待結果或非阻塞并行執行的場景。異步調用支持回調函數,可與進度條等工具結合,實現任務完成實時反饋。文章通過示例展示了同步與異步調用的使用方法,并說明了進程池的生命周期管理(close
、terminate
、join
)及應用場景。
13 Python 異步編程-基本概念與事件循環和回調機制
本文介紹了異步編程(Asynchronous Programming)的基本概念及實現方式。異步編程允許程序在等待耗時操作(如 I/O 或網絡請求)完成時繼續執行其他任務,從而提高效率。文章首先區分了順序、并發、串行和并行的概念,指出并發關注任務調度而并行關注任務實際同時執行;異步編程則是一種非阻塞的執行模型,可應用于單線程或多線程環境。核心實現機制包括事件循環(Event Loop)和回調函數(Callback),事件循環負責管理任務和事件觸發順序,回調函數在任務完成時自動處理結果。Python 的 asyncio
模塊提供了管理事件循環、協程(Coroutine)、任務(Task)和 Future 對象的方法,支持高效的異步編程模式。文章通過示例演示了異步任務的執行流程及事件循環調用方式,展示了異步編程在 I/O 密集型或多任務場景下的應用優勢。
14 Python 異步編程-協程的管理和調度
本文介紹了 Python 異步編程和協程(Coroutine)的核心概念及實現方式。協程是一種輕量級、非搶占式的任務單元,可以在執行過程中掛起并切換到其他協程,實現任務的高效調度。文章闡述了事件循環(Event Loop)、任務(Task)、Future 對象及回調函數(Callback)的作用,演示了如何使用 asyncio 模塊通過 async/await
、create_task()
、gather()
、wait()
和 as_completed()
等方法管理協程與異步任務,實現 I/O 密集型程序的并發執行和任務超時控制。通過示例展示了協程在多任務并發、任務調度和結果處理中的實際應用,以及協程與傳統線程、進程的區別與優勢。