You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在主Jupyter Notebook中并行调用多个子Notebook?

实现Jupyter子Notebook并行运行的几种方法

方法1:使用concurrent.futures.ProcessPoolExecutor

利用Python进程池并行执行子Notebook,适合CPU密集型任务。借助IPython API在子进程中执行%run魔法命令:

from concurrent.futures import ProcessPoolExecutor
from IPython import get_ipython

def run_notebook(notebook_path):
    ip = get_ipython()
    ip.run_line_magic('run', notebook_path)

# 子Notebook列表
notebooks = [
    './Notebook1.ipynb',
    './Notebook2.ipynb',
    './Notebook3.ipynb',
    './Notebook4.ipynb',
    './Notebook5.ipynb'
]

# 并行执行,max_workers可根据CPU核心数调整
with ProcessPoolExecutor(max_workers=3) as executor:
    executor.map(run_notebook, notebooks)

注意事项:

  • 子进程环境独立,主Notebook的全局变量不会被继承,子Notebook的输出也不会直接返回主Notebook,需通过文件、数据库等外部存储传递结果。
  • 避免子Notebook读写同一文件,防止数据冲突。

方法2:使用multiprocessing模块

直接创建子进程运行每个Notebook,逻辑更直观:

import multiprocessing
from IPython import get_ipython

def run_notebook(notebook_path):
    ip = get_ipython()
    ip.run_line_magic('run', notebook_path)

if __name__ == '__main__':
    notebooks = [
        './Notebook1.ipynb',
        './Notebook2.ipynb',
        './Notebook3.ipynb',
        './Notebook4.ipynb',
        './Notebook5.ipynb'
    ]
    processes = []
    for nb in notebooks:
        p = multiprocessing.Process(target=run_notebook, args=(nb,))
        processes.append(p)
        p.start()
    
    # 等待所有进程执行完成
    for p in processes:
        p.join()

方法3:使用nbconvert命令行工具

通过jupyter nbconvert命令直接执行Notebook,结合subprocess实现并行,环境隔离性更好:

from concurrent.futures import ProcessPoolExecutor
import subprocess

def run_notebook_with_nbconvert(notebook_path):
    # 执行Notebook并覆盖原文件,可替换--inplace为--output指定新输出文件
    cmd = [
        'jupyter', 'nbconvert',
        '--execute',
        '--to', 'notebook',
        '--inplace',
        notebook_path
    ]
    subprocess.run(cmd, check=True)

notebooks = [
    './Notebook1.ipynb',
    './Notebook2.ipynb',
    './Notebook3.ipynb',
    './Notebook4.ipynb',
    './Notebook5.ipynb'
]

with ProcessPoolExecutor(max_workers=3) as executor:
    executor.map(run_notebook_with_nbconvert, notebooks)

内容的提问来源于stack exchange,提问作者Javi Torre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:50:25