我怎么知道我的Python进程绑定了哪个核心?

时间:2012-12-22 15:31:29

标签: python process

我如何知道我的Python进程绑定到哪个进程? 在这些相同的行中,子进程是否会在父进程正在执行的同一核心(即CPU)上执行?

1 个答案:

答案 0 :(得分:10)

进程和本机操作系统线程仅绑定到特定处理器,如果某人特别要求发生这种情况。默认情况下,可以(并且将)在任何可用的处理器上调度进程和线程。

现代操作系统使用先发制人的多线程,可以随时中断线程的执行。当该线程下次调度运行时,它可以在不同的处理器上执行。这称为上下文切换。线程的整个执行上下文由操作系统存储,然后在重新调度线程时,恢复执行上下文。

由于所有这一切,因为问题的答案随时可能发生变化,因此询问您的线程正在执行哪个处理器并不合理。甚至在执行查询当前线程的处理器的函数期间。

同样,默认情况下,两个独立进程执行的处理器之间没有关系。这两个进程可以在同一处理器或不同处理器上执行。这一切都取决于操作系统如何决定安排不同的线程。

在评论中说明:

  

由于GIL锁定,Python进程将仅在一个核心上执行。

该陈述完全不正确。例如,Python代码的一部分将声明GIL,在所有可用处理器周围切换上下文,然后释放GIL。

在答案开始时我说过提到将进程或线程绑定到特定处理器的可能性。例如,在Windows上,您可以使用SetProcessAffinityMaskSetThreadAffinityMask来执行此操作。但是,这样做很不寻常。我只记得曾经这样做过一次,这是为了确保CPUID的执行在特定的处理器上运行。在正常运行的事情中,进程和线程与所有处理器具有亲和力。

在另一条评论中你说:

  

我正在创建子进程以使用CPU的多核。

在这种情况下,您无需担心。通常,您将创建与逻辑处理器一样多的进程。操作系统调度程序是合理的,并将安排每个不同的进程在不同的处理器上运行。从而充分利用可用的硬件资源。