Python多处理器编程
我不认为这可以做到可靠,因为一个过程不限于核心。一个进程可以在一个或多个内核上执行(如果它使用线程),并且随着os尝试平衡工作负载,用于执行它的内核可能随时间而改变。
至于获取与过程相关的信息的好方法请查看psutil库。
简短的回答
不,这是不可能的。
龙答案
在一般情况下,你不能这样做,因为进程不会绑定到特定内核。 进程没有固定的CPU,它们始终保证运行:操作系统决定使用哪个核心来在特定时间运行特定进程。这个决策被称为scheduling,其实现是操作系统特定的。
在特定的操作系统上,您可能能够控制处理器如何用于执行特定进程。首选处理器的分配通常被称为processor affinity。即使设置亲和性也不能保证一个进程总是在给定的内核上执行:它最终由OS(和CPU)决定如何最终执行调度。
从我所知道的所有操作系统中,我能想到的最接近的是Linux的sched_getcpu
,它可以用来“确定调用线程正在运行的CPU”(请参见man sched_getcpu
)。即使你使用这个函数检查了当前的CPU,内核也可能在之后改变内核。
我不知道是否存在一个跨平台的解决方案来处理设置和查询进程亲和力。在Windows上,您可以通过调用[SetProcessAffinityMask](http://msdn.microsoft.com/en-us/library/windows/desktop/ms686223%28v=vs.85%29)将进程关联设置为特定的一组内核。 aspx)与一个位向量。 – eryksun
我不认为它也存在。从PyPi中我发现'亲和力0.1.0'(http://pypi.python.org/pypi/affinity),它指出为Windows和某些特定的Linux内核提供亲和函数的包装。我还没有尝试过,甚至图书馆也不会提供给定问题的完整解决方案,这本身就是基于过程与特定CPus绑定的错误观念。 – jsalonen
我没有看到进程没有被绑定到特定CPU的原因不允许我们以特定时间间隔检索它们正在运行的CPU。为什么我不能每10秒检查一次哪个CPU正在运行我的进程? –
的Python可能没有这样的功能了,但
C库可用,您可以根据需要使用Python代码绑定他们。
编程方式或通过OS?如果是OS,那么哪个OS? – jzila
你的意思是通过编程或操作系统?如果你的意思是通过程序或从外部来的,我希望从程序内部获得它。例如,我可以使用os.getpid()获取进程ID,我可以做类似的事情来找到运行该进程的CPU。 –
顺便说一句。你为什么要首先找出CPU号码?你想达到什么目的? – jsalonen