Python多处理器编程

时间:2011-11-29 07:44:26

标签: python multiprocessing

在python中,有没有办法找出正在运行哪个进程的CPU?例如,如果我使用多处理模块为不同的任务创建不同的流程,是否可以识别每个流程运行的核心?

3 个答案:

答案 0 :(得分:3)

简短回答

不,这是不可能的。

答案很长

在一般情况下,您不能这样做,因为进程未绑定到特定核心。 进程没有始终保证可以运行的固定CPU:由操作系统决定,它在特定时间运行特定进程所使用的核心。此决策称为scheduling,其实现是特定于操作系统的。

在特定的操作系统上,您可以控制处理器如何用于执行特定进程。首选处理器的分配通常称为processor affinity。即使设置亲缘关系也不能保证在给定的内核上始终执行进程:最终由OS(和CPU)决定如何最终执行调度。

从我所知道的所有操作系统中,我能想到的最接近的东西是Linux的sched_getcpu,它可用于“确定调用线程正在运行的CPU”(参见man sched_getcpu)。即使您使用此功能检查当前CPU,内核也可能会在之后更改内核。

答案 1 :(得分:3)

Python现在可能没有这样的功能,但是

可以使用C库,如果需要,可以使用python代码绑定它们。

参考: How could I know which core a process is running on?

答案 2 :(得分:1)

我不认为这可以可靠地完成,因为流程不仅限于核心。一个进程可以在一个或多个核上执行(如果它使用线程),并且用于执行它的核可以随着操作系统尝试平衡工作负载而发生变化。

关于获取与流程相关的信息的好方法是查看psutil库。