如何在 Python 多处理上识别进程的 CPU 核心 ID?

How to identify the CPU core ID of a process on Python multiprocessing?

我正在使用 SLURM 在集群上测试 Python 的 multiprocessing 模块。我想绝对确保我的每个任务实际上都是 运行 在单独的 cpu 核心上,正如我想要的那样。由于配置 SLURM 的多种可能性,这一点并不明显。

因此,我想知道是否有办法从 运行 Python 任务中获取核心特定信息。我需要我的 Python 脚本来获取有关其 运行 核心的信息,以便区分各种核心。

考虑以下脚本。启动了 10 个任务。有没有办法让他们每个人打印关于他们被分配到的核心的核心特定信息?

import multiprocessing

def hello():
    print "Hello World"

pool = multiprocessing.Pool()
jobs = []
for j in range(10):
    p = multiprocessing.Process(target = hello)
    jobs.append(p)
    p.start()

我找到的模块 here and here 给出了 CPU 特定信息,但这些是关于可用 CPU 的,而不是运行时的核心信息。

在 Linux、FreeBSD、SunOS 上,您可以为此使用 psutil-模块:

psutil.Process().cpu_num()

请注意,只要您不同时设置 cpu-affinity,您的 OS 就会任意将执行迁移到不同的内核。默认情况下,进程不会分配给特定的内核,通常最好让您的 OS 决定将哪个内核分配给 运行 某些东西。