python中的多处理与核心数

问题描述

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

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

#Edit 1 - 2021 年 1 月 21 日

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

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

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

解决方法

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

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

,

确保使用始终是最佳做法

count

当你创建一个进程时,它需要开销来管理它、它的内存空间和它的共享内存。此外,操作系统必须运行,所以让内核空闲总是礼貌的,可以加快问题的执行。