【jupyter 使用多进程方案】

可选择的方案:

  1. pathos.multiprocessing
  2. joblib.Parallel

来写的 Jupyter Notebook 兼容版本 示例。


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

python 复制代码
from pathos.multiprocessing import ProcessingPool as Pool
from tqdm import tqdm

def 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 直接用,写成 list
results = 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密集,稳定)

python 复制代码
from joblib import Parallel, delayed
from tqdm import tqdm

def 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

bash 复制代码
pip install pathos joblib

✅ 总结对比

特性 pathos joblib
Jupyter兼容
多参数传递 ✅(tuple 拆包) ✅(delayed(f)(...)
支持 tqdm ✅(配合 uimap ✅(在 for 循环外)
稳定性/文档支持 中(社区较活跃) 高(广泛用于 sklearn 等)
推荐使用场景 函数自由写、调试方便 大批量 CPU 密集任务
相关推荐
编程火箭车6 小时前
04.第一个 Python 程序:Hello World 从编写到运行全解析
python·python第一个程序·python入门报错解决·python新手教程·hello world 程序·python终端运行·pycharm运行代码
qq_423233906 小时前
如何用FastAPI构建高性能的现代API
jvm·数据库·python
疯狂踩坑人6 小时前
【Python版 2026 从零学Langchain 1.x】(二)结构化输出和工具调用
后端·python·langchain
HDO清风7 小时前
CASIA-HWDB2.x 数据集DGRL文件解析(python)
开发语言·人工智能·pytorch·python·目标检测·计算机视觉·restful
weixin_499771557 小时前
Python上下文管理器(with语句)的原理与实践
jvm·数据库·python
weixin_452159557 小时前
高级爬虫技巧:处理JavaScript渲染(Selenium)
jvm·数据库·python
多米Domi0117 小时前
0x3f 第48天 面向实习的八股背诵第五天 + 堆一题 背了JUC的题,java.util.Concurrency
开发语言·数据结构·python·算法·leetcode·面试
深蓝海拓7 小时前
PySide6从0开始学习的笔记(二十六) 重写Qt窗口对象的事件(QEvent)处理方法
笔记·python·qt·学习·pyqt
纠结哥_Shrek7 小时前
外贸选品工程师的工作流程和方法论
python·机器学习
小汤圆不甜不要钱7 小时前
「Datawhale」RAG技术全栈指南 Task 5
python·llm·rag