Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何知道我的Python进程绑定到了哪个核心?_Python_Process - Fatal编程技术网

我如何知道我的Python进程绑定到了哪个核心?

我如何知道我的Python进程绑定到了哪个核心?,python,process,Python,Process,我如何知道我的Python进程绑定到了哪个进程? 仅在这些相同的行中,子进程是否将在父进程当前正在执行的同一个核心(即CPU)上执行?进程和本机OS线程仅在有人明确请求时绑定到特定的处理器。默认情况下,进程和线程可以(也将)在任何可用的处理器上调度 现代操作系统使用先发制人的多线程,可以随时中断线程的执行。当该线程下一次计划运行时,它可以在不同的处理器上执行。这称为上下文切换。线程的整个执行上下文由操作系统存储,然后当线程被重新调度时,执行上下文被恢复 由于所有这些原因,询问线程在哪个处理器上执

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

进程和本机OS线程仅在有人明确请求时绑定到特定的处理器。默认情况下,进程和线程可以(也将)在任何可用的处理器上调度

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

由于所有这些原因,询问线程在哪个处理器上执行是没有实际意义的,因为答案随时可能改变。甚至在查询当前线程的处理器的函数执行期间

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

在您的评论中:

由于GIL锁,Python进程将只在一个内核上执行

这种说法完全不正确。例如,一段Python代码将声明GIL,在所有可用处理器周围切换上下文,然后释放GIL

在回答的开头,我提到了将进程或线程绑定到特定处理器的可能性。例如,在Windows上,可以使用
SetProcessAffinityMask
SetThreadAffinityMask
执行此操作。然而,这样做是不寻常的。我只记得曾经这样做过一次,那是为了确保
CPUID
的执行在特定的处理器上运行。在正常运行中,进程和线程与所有处理器都有密切关系

在另一个评论中,你说:

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


在这种情况下,你没有什么可担心的。通常,您将创建与逻辑处理器数量相同的进程。操作系统调度器是明智的,它会将每个不同的进程安排在不同的处理器上运行。从而使可用的硬件资源得到最佳利用。

绑定到进程是什么意思?pid?CPU核心?@usernaveen我不相信进程通常与CPU核心绑定。@millimoose由于cpython GIL锁,python进程将只在一个核心上执行,这就是我的情况asking@usernaveen这只适用于任何特定时刻。操作系统当然可以根据需要在不同的内核上自由调度。这意味着运行进程的核心可以在假设的函数调用过程中更改以确定这一点。(除非执行禁用中断之类的操作。即使这样,您也只能假设确定在此期间使用的是哪个内核。)一般来说,可以告诉操作系统只在一个特定的内核上安排进程,但这不是您要求的,也是操作系统特定的。@millimoose子进程呢,它们是在同一个进程上执行还是在另一个核心上执行。因为我正在创建子进程来使用cpu的多个核心。所以我想确认一下。谢谢你宝贵的回答,这对我非常有用。我没有一本好书推荐给你。这完全取决于你在寻找什么。“只有在有人明确要求时,线程才会绑定到特定的处理器”。在这种情况下,有没有办法查询线程/进程绑定到哪个处理器ID?