Python multiprocessing模块通过独立进程绕过GIL实现CPU密集型任务多核并发,需掌握进程创建、进程池、进程间通信及异常处理四大核心环节。

Python 的 multiprocessing 模块是解决 CPU 密集型任务并行化的标准方案,它通过启动独立进程绕过 GIL 限制,真正实现多核并发。关键在于理解进程隔离性、合理选择通信方式,并避免常见陷阱。
进程创建与基本用法
使用 Process 类可手动管理子进程,适合控制粒度高、生命周期明确的任务。
- 目标函数不能是嵌套或 lambda 函数(需能被 pickle 序列化)
- 调用
.start()启动进程,.join()等待结束,不调用join可能导致主程序退出而子进程被强制终止 - 示例:计算斐波那契数列的两个大值,分别交由两个进程执行
进程池高效处理批量任务
Pool 是最常用的方式,自动管理进程生命周期和任务分发,适合大量同构任务。
-
pool.map()顺序阻塞执行,返回结果列表,输入可迭代对象 -
pool.apply_async()异步提交,返回AsyncResult对象,可用.get(timeout=)获取结果 - 注意:默认进程数为
os.cpu_count(),I/O 密集型任务不宜盲目增加进程数
进程间数据共享与通信
进程内存隔离,不可直接读写全局变量。需借助专用机制:
PrestaShop 开源网店系统是一款针对web2.0设计的全功能、跨平台的免费开源电子商务解决方案,自08年1.0版本发布,短短两年时间,发展迅速,全球已超过四万家网店采用Prestashop进行布署。Prestashop 开源网店系统基于Smarty引擎编程设计,模块化设计,扩展性强,能轻易实现多种语言,多种货币浏览交易,支持Paypal等几乎所有的支付手段,是外贸网站建站的佳选。Prest
立即学习“Python免费学习笔记(深入)”;
-
Queue和Pipe:安全传递任意可序列化对象,Queue支持多生产者/消费者,Pipe更快但仅限双端通信 -
Value/Array:共享简单 C 类型数据(如 int、float、ctypes 数组),需加锁防止竞争 - 避免用全局变量+多进程修改——看似生效实则每个进程操作的是副本
异常处理与资源清理
子进程崩溃不会自动传播到主进程,容易静默失败。
- 在子进程中捕获异常并显式记录日志,或通过
Queue发送错误信息回主进程 - 使用
with Pool() as pool:确保进程池正常关闭;手动创建的进程建议在finally或atexit中调用.close()和.join() - Windows 下需将进程启动代码放入
if __name__ == '__main__':块,防止递归创建子进程
不复杂但容易忽略。掌握这四个核心环节,就能稳定写出高效、健壮的多进程 Python 程序。









