每个 jupyter notebook 都使用线程还是进程

kgu*_*guo 2 python jupyter-notebook

当我运行命令时

jupyter 笔记本

从 bash shell 这将在本地主机上启动一个 jupyter 笔记本服务器。每次我打开一个新笔记本并开始执行代码时,这是一个单独核心上的新进程还是同一核心上的一个新线程?假设我要在具有 M 个内核的机器上运行 N 个不同的 CPU 重的独立笔记本

  1. 如果它们都从具有不同线程的同一个核心(同一个进程)运行,那么其余的核心基本上是空闲的吗?
  2. 如果它们从不同的内核运行,那么这是否意味着我只能同时运行 M 个笔记本?
  3. 或者可能是两者的混合:ipython 内核负责启动超出我手动控制的新线程/进程。在这种情况下,总共只有 M 个笔记本才能在解释器级别实际同时执行,但我可以打开我的内存允许的尽可能多的笔记本。

kgu*_*guo 5

我在我的笔记本电脑上做了一个实验,它有 2 个内核,最多 4 个线程。我在 2-5 个相同的笔记本之间运行,每个笔记本从 1-100 万亿增加一个数字。每个笔记本需要几分钟才能完成执行。

在 Windows 任务管理器中,每个笔记本都被视为自己的进程。最多可以同时执行 4 个笔记本,每个笔记本占用单个 CPU 的 20-25%。第 5 个笔记本实际上必须等到其他笔记本完成后才开始执行。

所以要回答我自己的问题

  1. Notebook 的每次执行都是一个单独的线程,能够在您计算机的任何内核上运行。如果不使用像 Threading 这样的库,同一个 notebook 中的单元就不能同时执行(显然)。
  2. 您可以在 RAM 允许的范围内打开尽可能多的笔记本,假设它们不执行。但是,您只能运行

    MAX_THREADS = THREADS_PER_CORE*NUM_CORES

    同时记笔记。如果您尝试运行更多,额外的笔记本将停止,直到其他线程完成。

  3. 这是正确的解释


小智 1

从我阅读文档、错误报告以及我自己的使用来看,每个jupyter notebook命令都会启动它自己的工作进程,这就是可直接运行的范围。还可以使用附加组件或各种并发模块将长时间运行的作业发送到单独的工作任务。