1. Python多进程编程核心概念解析
Python多进程编程是利用操作系统级别的进程来实现真正的并行计算,特别适合CPU密集型任务。与多线程不同,多进程可以绕过GIL(全局解释器锁)的限制,充分利用多核CPU的计算能力。
关键区别:多线程共享内存空间,适合I/O密集型任务;多进程拥有独立内存空间,适合CPU密集型任务
现代Python多进程编程主要基于multiprocessing模块,它提供了Process、Pool等多种进程管理方式,以及Queue、Pipe等进程间通信机制。在实际工程中,合理使用多进程可以将计算性能提升数倍,但同时也需要注意进程创建开销、数据共享限制等问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础进程创建与管理
2.1 Process类基础用法
Process类是创建独立进程的基础方式,每个Process对象代表一个独立的Python解释器进程:
python复制from multiprocessing import Process
import time
def worker(name):
print(f"Worker {name} 开始 (PID: {os.getpid()})")
time.sleep(1)
print(f"Worker {name} 结束")
if __name__ == '__main__':
processes = []
for i in range(3):
p = Process(target=worker, args=(f"{i}",))
processes.append(p)
p.start() # 启动进程
for p in processes:
p.join() # 等待进程结束
关键参数说明:
target: 要执行的函数args: 函数参数(必须是可pickle的元组)kwargs: 关键字参数字典daemon: 是否设置为守护进程(主进程结束时自动终止)
实际经验:在Linux/Mac上使用
fork创建进程较快,Windows上使用spawn会有较大开销
2.2 进程生命周期控制
python复制p = Process(target=worker)
p.start() # 启动进程
p.is_alive() # 检查是否运行中
p.terminate() # 强制终止进程
p.join(timeout=5) # 等待最多5秒
常见问题:
- 进程卡死:设置
timeout参数避免无限等待 - 僵尸进程:确保调用
join()或terminate() - 资源泄漏:使用
with语句或try-finally确保清理
3. 进程池高级用法
3.1 Pool核心方法对比
| 方法 | 阻塞 | 顺序保证 | 适用场景 |
|---|---|---|---|
map() |
是 | 是 | 简单批量任务 |
map_async() |
否 | 是 | 异步批量任务 |
imap() |
否 | 是 | 大任务流式处理 |
imap_unordered() |
否 | 否 | 快速获取首个可用结果 |
apply() |
是 | - | 单个任务同步执行 |
apply_async() |
否 | - | 单个任务异步执行 |
3.2 性能优化实践
示例:使用imap_unordered处理大型数据集
python复制from multiprocessing import Pool
im
