1. Python多进程编程的核心价值
在数据处理和计算密集型任务中,单线程程序往往会遇到性能瓶颈。我去年处理过一个千万级CSV文件解析的项目,最初用单线程跑了近8小时,后来改用多进程后仅用47分钟就完成了全部处理。这种性能提升不是理论上的数字游戏,而是真实场景下的生产力革命。
Python的多进程模块(multiprocessing)通过启动独立的解释器进程来规避GIL限制,每个进程拥有自己的内存空间和Python解释器。与多线程相比,多进程更适合CPU密集型任务,特别是在现代多核CPU架构下,可以真正实现并行计算。不过要注意,进程间通信的成本比线程间通信高得多,这是设计多进程架构时需要权衡的关键点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础用法与进程创建
2.1 Process类的基本使用
创建新进程最直接的方式是使用Process类。下面这个案例演示了如何启动一个后台进程来执行计算任务:
python复制from multiprocessing import Process
import os
def calculate_square(nums):
print(f"子进程ID: {os.getpid()}")
for n in nums:
print(f"{n}的平方是: {n*n}")
if __name__ == '__main__':
numbers = [1, 2, 3, 4, 5]
p = Process(target=calculate_square, args=(numbers,))
p.start()
p.join()
print(f"主进程ID: {os.getpid()}")
关键点说明:
target参数指定要在新进程中运行的函数args以元组形式传递参数start()方法启动进程join()等待子进程结束
注意:在Windows系统上必须使用
if __name__ == '__main__':保护主模块代码,否则会引发递归创建进程的问题。
2.2 进程池的实用技巧
当需要管理大量进程时,Pool类提供了更高级的抽象。这是我处理批量图片转换时使用的代码模板:
python复制from multiprocessing import Pool
import time
def process_image(img_path):
# 模拟耗时操作
time.sleep(1)
return f"{img_path} processed"
if __name__ == '__main__':
image_files = [f"img_{i}.jpg" for i in range(10)]
with Pool(processes=4) as pool:
results = pool.map(process_image, image_files)
print(results)
实际项目中的经验:
- 进程数通常设置为
