一文速通 Python 并行计算:教程总结

摘要:
本教程是一个系统性的 Python 并行计算实战指南,它从并行计算的基本概念出发,循序渐进地深入讲解了 Python 中实现并发的三大核心范式:多线程、多进程和异步编程。它不仅详细剖析了多线程的 GIL 机制、各种同步原语(锁、信号量、条件变量等)和通信方式(队列),还清晰地对比了多进程在突破 GIL 限制、实现真正并行计算上的优势,涵盖了进程间数据共享与通信的多种方案(共享内存、管理器、管道)。最后,教程引入了现代的异步编程模型,解释了事件循环和协程如何高效处理高 I/O 密集型任务。整个系列结构清晰,由浅入深,为开发者提供了从理论到实践的完整知识体系,是快速掌握并运用 Python 提升程序性能的优质教程。
关于我们更多介绍可以查看云文档: Freak 嵌入式工作室云文档,或者访问我们的 wiki:****https://github.com/leezisheng/Doc/wik
原文链接:
往期推荐:
全网最适合入门的面向对象编程教程: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并行计算: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异步编程-协程的管理和调度
更多精彩内容可看:
给你的 Python 加加速:一文速通 Python 并行计算
一个MicroPython的开源项目集锦:awesome-micropython,包含各个方面的Micropython工具库
Avnet ZUBoard 1CG开发板---深度学习新选择
万字长文手把手教你实现MicroPython/Python发布第三方库
工科比赛"无脑"操作指南:知识学习硬件选购→代码调试→报告撰写的保姆级路线图
爆肝整理长文】大学生竞赛速通指南:选题 × 组队 × 路演 48 小时备赛搞定
女大学生摆摊亏损5000元踩点实录:成都哪里人最多、最容易赚到钱?我告诉你!
普通继电器 vs 磁保持继电器 vs MOS管:工作原理与电路设计全解析
告别TP4056!国产SY3501D单芯片搞定充放电+升压,仅需7个元件!附开源PCB文件
文档获取:
可访问如下链接进行对文档下载:
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 密集型程序的并发执行和任务超时控制。通过示例展示了协程在多任务并发、任务调度和结果处理中的实际应用,以及协程与传统线程、进程的区别与优势。
