为什么需要掌握Python多进程?
当你的Python程序遇到性能瓶颈时,特别是处理CPU密集型任务时,单线程的局限就会暴露无遗。由于GIL(全局解释器锁)的存在,多线程在Python中并不能真正实现并行计算。这时候就需要了解Python多进程怎么用——通过创建独立的进程来突破GIL限制,充分利用多核CPU的计算能力。
multiprocessing模块基础用法
1. 创建第一个子进程
使用multiprocessing模块创建进程只需三步:
- 导入模块:import multiprocessing
- 定义任务函数:def worker(): print('子进程执行')
- 创建Process对象: p = multiprocessing.Process(target=worker) p.start()
2. 进程与线程的关键区别
| 对比项 | 多进程 | 多线程 |
|---|---|---|
| 内存空间 | 独立 | 共享 |
| GIL影响 | 不受限 | 受限制 |
| 创建开销 | 较大 | 较小 |
进程间通信的三种实用方法
1. 使用Queue实现安全通信
你可能会问:多个进程如何交换数据?Queue是最常用的解决方案:

- 创建队列:q = multiprocessing.Queue()
- 生产者进程:q.put(data)
- 消费者进程:data = q.get()
2. Pipe实现双向通信
适合两个进程间的双工通信:
parent_conn, child_conn = multiprocessing.Pipe()
child_conn.send('消息')
print(parent_conn.recv()) # 输出'消息'
进程池高级用法
1. 创建固定大小的进程池
有人会说:频繁创建进程开销太大怎么办?Pool正是解决这个问题的:
- 初始化池子:pool = multiprocessing.Pool(processes=4)
- 提交任务:results = pool.map(worker, tasks)
- 关闭回收: pool.close() pool.join()
2. 处理异常的正确姿势
在进程池中使用apply_async时,建议添加错误回调:
pool.apply_async(func, args, error_callback=handle_error)
通过这些方法,你可以在数据分析、机器学习等场景中轻松实现真正的并行计算。值得注意的是,进程间通信的成本较高,在设计架构时应尽量减少数据传递。