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

Bot*_*ond 7 python multiprocessing cpu-cores python-multiprocessing

multiprocessing我正在使用 SLURM 在集群上测试 Python 的模块。我想绝对确保我的每个任务实际上都按照我的意图在单独的 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()
Run Code Online (Sandbox Code Playgroud)

我在这里这里找到的模块提供了 CPU 特定信息,但这些是关于可用 CPU 的信息,而不是运行时的核心信息。

Dar*_*aut 8

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

psutil.Process().cpu_num()
Run Code Online (Sandbox Code Playgroud)

请注意,只要您不设置 cpu 亲和性,您的操作系统就会任意将执行迁移到不同的核心。默认情况下,进程不会分配给特定的核心,通常最好让操作系统决定在哪个核心上运行某些内容。