> 技术文档 > 【jupyter 使用多进程方案】

【jupyter 使用多进程方案】

可选择的方案:

  1. pathos.multiprocessing
  2. joblib.Parallel

来写的 Jupyter Notebook 兼容版本 示例


✅ 方法一:使用 pathos.multiprocessing(Jupyter友好)

from pathos.multiprocessing import ProcessingPool as Poolfrom tqdm import tqdmdef process_image(img_path, output_path): # 你的图像处理逻辑,比如保存图像到 output_path # 示例代码如下(请根据你实际处理内容修改): from PIL import Image img = Image.open(img_path) img.save(output_path) return output_path# 构造参数列表(每个是一个元组)args = [(img_path, output_path / img_path.name) for img_path in img_paths]# 初始化 Pool 并并行处理pool = Pool() # 默认使用 CPU 核心数# tqdm 不支持 map 直接用,写成 listresults = list(tqdm(pool.uimap(lambda args: process_image(*args), args), total=len(args)))

🔑 特点:

  • 支持在 Jupyter 中直接运行;
  • 不需要 if __name__ == \"__main__\"
  • 支持传多个参数(通过 *args 拆包);
  • 使用 uimap() 可以有 tqdm 进度条(imap 带顺序,map 会等全部完成)。

✅ 方法二:使用 joblib.Parallel(适合CPU密集,稳定)

from joblib import Parallel, delayedfrom tqdm import tqdmdef process_image(img_path, output_path): from PIL import Image img = Image.open(img_path) img.save(output_path) return output_path# tqdm 进度条用在参数上results = Parallel(n_jobs=-1)( delayed(process_image)(img_path, output_path / img_path.name) for img_path in tqdm(img_paths))

🔑 特点:

  • n_jobs=-1 表示使用所有可用核心;
  • 同样支持多个参数;
  • 在 Jupyter 运行稳定,依赖 loky 后端;
  • 避免了 pickle 报错。

📦 安装依赖

如果你没有安装 pathosjoblib

pip install pathos joblib

✅ 总结对比

特性 pathos joblib Jupyter兼容 ✅ ✅ 多参数传递 ✅(tuple 拆包) ✅(delayed(f)(...)) 支持 tqdm ✅(配合 uimap) ✅(在 for 循环外) 稳定性/文档支持 中(社区较活跃) 高(广泛用于 sklearn 等) 推荐使用场景 函数自由写、调试方便 大批量 CPU 密集任务