Python 进程池与线程池核心区别及选择指南本质区别线程池ThreadPool基于多线程共享同一块内存受 GIL 限制适用于 I/O 密集型任务。进程池ProcessPool基于多进程独立内存空间不受 GIL 限制适用于 CPU 密集型任务。关键差异对比维度线程池 ThreadPool进程池 ProcessPoolGIL 限制受限制同一时刻仅单线程执行无限制支持多核并行内存共享共享内存变量互通独立内存需序列化传递数据启动速度快速较慢进程创建开销大数据传递直接引用传递必须可序列化pickle适用场景I/O 密集型任务CPU 密集型任务崩溃影响可能影响整个进程子进程崩溃不影响主进程回调执行环境子线程中执行子进程中执行线程池适用场景网络请求如爬虫、API 调用文件读写操作数据库查询高延迟任务如等待外部响应优势轻量级启动速度快可直接共享全局变量和连接对象回调函数实现简单如call_done_back进程池适用场景复杂数学计算视频/图像编码解码加密解密操作循环密集型计算核心价值突破 GIL 限制实现真正多核并行独立内存空间避免线程安全问题GIL 关键影响多线程受 GIL 限制本质是并发交替执行多进程无 GIL 限制实现真正并行结论CPU 密集型任务使用线程池效率低下必须用进程池I/O 密集型任务使用进程池会造成资源浪费优先线程池代码实现差异线程池示例from concurrent.futures import ThreadPoolExecutor def task(x): return x * x def call_done_back(future): print(回调结果:, future.result()) with ThreadPoolExecutor(4) as pool: future pool.submit(task, 5) future.add_done_callback(call_done_back)进程池示例from concurrent.futures import ProcessPoolExecutor def task(x): return x * x def call_done_back(future): print(回调结果:, future.result()) if __name__ __main__: with ProcessPoolExecutor(4) as pool: future pool.submit(task, 5) future.add_done_callback(call_done_back)进程池特殊要求必须使用if __name__ __main__保护任务函数及参数必须可序列化无法直接共享全局变量回调函数注意事项两者回调用法完全一致future.add_done_callback(your_func)回调均在子线程/子进程中执行关键区别线程池回调可直接访问主线程变量进程池回调只能通过future.result()获取结果选择口诀I/O 密集型 → 线程池CPU 密集型 → 进程池需共享变量 → 线程池需真正并行 → 进程池回调机制 → 两者语法相同高级封装建议可实现的工具类功能统一回调接口自动异常处理智能池类型选择生产环境就绪封装