Python 多进程编程
在Python中,有没有办法知道一个进程正在使用哪个CPU?比如说,如果我为不同的任务创建不同的进程,使用多进程模块,那有没有办法找出每个进程正在运行在哪个核心上呢?
2 个回答
1
我觉得这个事情不太可能做到,因为一个进程并不是只在一个核心上运行。一个进程可以在一个或多个核心上执行(如果它使用了线程的话),而且用来执行它的核心可能会随着时间的推移而变化,因为操作系统会尝试平衡工作负载。
如果你想要获取一些关于进程的信息,可以看看 psutil 这个库。
3
简短回答
不,这个是不可能的。
详细回答
一般来说,你是无法做到这一点的,因为进程并不是固定在某个特定的核心上运行的。进程并没有固定的CPU,它们总是可以在任何核心上运行:这由操作系统来决定,哪个核心在什么时间运行特定的进程。这个决策过程叫做 调度,而具体的实现方式是跟操作系统有关的。
在某些特定的操作系统上,你可能可以控制处理器如何执行特定的进程。将优先使用的处理器进行分配,通常被称为 处理器亲和性。即使设置了亲和性,也不能保证一个进程总是在指定的核心上执行:最终还是由操作系统(和CPU)来决定调度是如何执行的。
在我知道的所有操作系统中,最接近的例子可能是Linux的 sched_getcpu
,它可以用来“确定调用线程正在运行的CPU”(查看 man sched_getcpu
)。即使你用这个函数检查了当前的CPU,内核也可能会在之后立即更换核心。