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

nav*_*nam 2 python process

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

Dav*_*nan 10

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

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

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

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

在评论中,您声明:

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

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

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

在另一个评论中你说:

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

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