2026-10-22 17:53:46
多进程编程是Python中提升程序性能的重要手段,尤其适合处理CPU密集型任务和并行计算场景。本文将系统介绍Python多进程编程的核心方法、模块使用及注意事项。
提供基础进程管理功能,包括进程创建、同步和通信。
关键特性:
基础示例:
import multiprocessingdef worker(num): print(f"Process {num} running")if __name__ == '__main__': processes = [] for i in range(4): p = multiprocessing.Process(target=worker, args=(i,)) processes.append(p) p.start() for p in processes: p.join()2. concurrent.futures模块提供更高级的并行编程接口,简化任务调度和结果收集。
关键特性:
高级示例:
import concurrent.futuresdef square(x): return x * xif __name__ == '__main__': with concurrent.futures.ProcessPoolExecutor() as executor: results = executor.map(square, [1, 2, 3, 4]) for result in results: print(result)线程/进程安全的FIFO数据结构,适合生产者-消费者模式。
def producer(q): for i in range(5): q.put(i)def consumer(q): while True: item = q.get() print(f"Consumed {item}") q.task_done()if __name__ == '__main__': q = multiprocessing.Queue() p1 = multiprocessing.Process(target=producer, args=(q,)) p2 = multiprocessing.Process(target=consumer, args=(q,)) p1.start(); p2.start() p1.join(); p2.join()2. 管道(Pipe)双向通信通道,返回两个连接对象(发送端和接收端)。
def child(conn): conn.send("Hello from child") conn.close()if __name__ == '__main__': parent_conn, child_conn = multiprocessing.Pipe() p = multiprocessing.Process(target=child, args=(child_conn,)) p.start() print(parent_conn.recv()) p.join()3. 共享内存通过Value和Array实现进程间数据共享。
def worker(num, shared_array): shared_array[num] = num * 2if __name__ == '__main__': shared_array = multiprocessing.Array('i', 4) processes = [] for i in range(4): p = multiprocessing.Process(target=worker, args=(i, shared_array)) processes.append(p) p.start() for p in processes: p.join() print(list(shared_array)) # 输出: [0, 2, 4, 6]GIL规避:
Python的全局解释器锁(GIL)不影响多进程,每个进程有独立Python解释器和内存空间
启动开销:
进程创建比线程慢,适合计算密集型任务
频繁创建销毁进程会降低性能,建议使用进程池
数据共享限制:
进程间默认不共享内存,需显式使用通信机制
避免在进程间传递大型数据结构
平台差异:
Windows上multiprocessing需要if __name__ == '__main__':保护
Unix系统支持fork(),启动更快
资源管理:
确保所有进程正确终止,避免僵尸进程
注意系统对进程数量的限制(可通过ulimit -u查看)
合理选择进程数:
通常设置为CPU核心数(multiprocessing.cpu_count())
I/O密集型任务可适当增加
批量处理:
将小任务合并为批量处理,减少进程间通信
使用进程池:
避免重复创建销毁进程的开销
Pool.map()比手动管理进程更高效
避免竞争条件:
使用锁(Lock)保护共享资源
考虑使用Manager对象管理复杂共享状态
多进程编程是Python中实现并行计算的核心技术,合理使用可显著提升程序性能。开发者应根据具体场景选择合适的模块和通信方式,同时注意进程管理和资源控制,以充分发挥多核处理器的优势。