Python多处理器编程

Python多处理器编程,python,multiprocessing,Python,Multiprocessing,在python中,有没有一种方法可以找出进程运行在哪个CPU上?例如,如果我使用多处理模块为不同的任务创建不同的流程,是否可以识别每个流程运行的核心?我认为这是不可靠的,因为流程不限于核心。一个进程可以在一个或多个核心上执行(如果它使用线程),并且当操作系统试图平衡工作负载时,用于执行该进程的核心可以随时间而变化 关于获取流程相关信息的好方法,请访问库。简短回答 不,这是不可能的 长答案 在一般情况下,您不能这样做,因为进程没有绑定到特定的核心。 进程没有固定的CPU,它们总是保证在其上运行:由

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

我认为这是不可靠的,因为流程不限于核心。一个进程可以在一个或多个核心上执行(如果它使用线程),并且当操作系统试图平衡工作负载时,用于执行该进程的核心可以随时间而变化


关于获取流程相关信息的好方法,请访问库。

简短回答

不,这是不可能的

长答案

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

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


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

通过编程方式还是通过操作系统?如果是操作系统,那么是哪个操作系统?你所说的编程操作系统或操作系统是什么意思?如果你是指通过程序或从外部,我希望它从程序内部。例如,我可以使用os.getpid()获取进程ID,我可以执行类似的操作来查找该进程正在运行的CPU。顺便说一句。为什么您首先要找出CPU号?你想实现什么?我想对网卡上的数据包进行一些处理,并将处理过程划分为不同核心上的每个数据包。我想检查每个CPU正在处理多少进程。我不知道是否存在跨平台解决方案来处理设置和查询进程相关性。在Windows上,您可以通过使用位向量调用将进程关联设置为一组特定的核心。我认为它也不存在。从PyPi中,我找到了
affinity 0.1.0
(),它声明为Windows和某些特定Linux内核上的affinity函数提供包装。我还没有尝试过,即使是那个库也无法提供给定问题的完整解决方案,这本身是基于进程绑定到特定CPU的误解。我不明白为什么没有绑定到特定CPU的进程不允许我们在特定的时间间隔检索它们正在运行的CPU。为什么我不能检查哪个CPU正在运行我的进程,例如每10秒一次?因为它可能会在该指令之后立即改变。