python 中的多处理与核心数量

Sam*_*ena 3 python multiprocessing cpu-cores

如果运行一个 python 脚本,其中我使用多处理声明了 6 个进程,但我只有 4 个 CPU 核心,那么另外 2 个可以找到专用 CPU 核心的进程会发生什么情况。

  1. 他们是如何被处决的?
  2. 如果这两个额外的进程作为单独的线程在现有的 Core 上运行,GIL 不会停止它们的执行吗?

#编辑 1 - 2021 年 1 月 21 日

我在我提出的问题中混淆了线程和进程。由于我对这个概念有了更清晰的了解,我将问题 2 改写如下(以供将来参考):

如果这两个额外的进程与现有 Core 中的另外两个进程并行运行,GIL 不会停止它们的执行吗?

Ans:GIL 不影响进程,GIL 一次只允许一个线程运行,但是对进程没有限制。系统调度程序管理另外两个进程如何在现有内核上运行。

小智 6

首先,你混淆了线程和进程:在Python中,只有线程而不是进程必须在其解释器上共享锁。如果您正在使用多处理库,那么您正在使用具有自己的解释器的 Python 进程。

当您使用 Python 进程时,它们的执行由操作系统调度程序管理,就像计算机中的所有其他进程一样。如果您的进程数多于 CPU 核心数,则额外的进程将在后台等待调度。当其他进程终止、等待 IO 或定期出现时钟中断时,通常会发生这种情况。