python中的`multiprocessing`模块

在Python中,multiprocessing模块是用于实现多进程并行计算的核心库。以下是简明笔记:


核心概念

  1. 进程 vs 线程

    • 进程:独立内存空间,操作系统直接调度,适合CPU密集型任务
    • 线程:共享内存空间,受GIL限制,适合I/O密集型任务
  2. GIL问题

    • Python全局解释器锁(GIL)限制多线程并行效率
    • multiprocessing通过创建独立进程绕过GIL限制

核心作用

  1. 并行计算:利用多核CPU加速计算
  2. 隔离内存:进程崩溃不影响主程序
  3. 替代多线程:解决CPU密集型任务的并行瓶颈

核心组件

组件 作用 示例
Process 创建子进程 p = Process(target=func)
Pool 进程池管理 pool = Pool(processes=4)
Queue 进程间通信 q = Queue(); q.put(data)
Pipe 双向通信管道 parent_conn, child_conn = Pipe()
Lock 进程同步锁 lock = Lock(); lock.acquire()

经典示例

import multiprocessing as mp

def square(x):
    return x * x

if __name__ == '__main__':  # ⚠️ Windows必须加此保护
    # 方法1: 直接创建进程
    p = mp.Process(target=square, args=(5,))
    p.start()
    p.join()

    # 方法2: 使用进程池 (推荐)
    with mp.Pool(4) as pool:  # 创建4个进程
        results = pool.map(square, [1, 2, 3, 4, 5])
        print(results)  # [1, 4, 9, 16, 25]

关键注意事项

  1. 跨平台兼容

    • Windows需if __name__ == '__main__'避免递归创建进程
    • Linux/macOS可直接使用
  2. 进程间通信(IPC)

    • 优先用Queue代替共享内存
    • 大数据传输用Manager代理
  3. 资源开销

    • 进程创建比线程慢10-100倍
    • 适合长任务,短任务用线程池更高效

典型应用场景

  1. 科学计算/数值模拟
  2. 批量图片/视频处理
  3. 机器学习模型训练
  4. 大规模数据转换

📌 面试重点:对比multiprocessing vs threading,解释GIL影响,进程间通信方式选择

posted @ 2025-08-29 13:18  清澈的澈  阅读(3)  评论(0)    收藏  举报