【问题标题】:How to identify the CPU core ID of a process on Python multiprocessing?如何在 Python 多处理上识别进程的 CPU 核心 ID?
【发布时间】:2019-06-03 15:57:45
【问题描述】:

我正在使用 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()

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

【问题讨论】:

  • 我认为没有任何方法可以在 Python 中执行此操作,除非解析像 top 这样的 shell 命令的输出。请记住,这些信息通常也不是静态的。即使您可以获得工作进程的当前核心,调度程序也可能稍后将其放在不同的核心上,除非您已分配核心亲和性。虽然我之前没有使用过 SLURM,所以我不知道这会如何影响该声明。

标签: python multiprocessing python-multiprocessing cpu-cores


【解决方案1】:

在 Linux、FreeBSD、SunOS 上,您可以使用 psutil-module:

psutil.Process().cpu_num()

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2011-08-22
    • 2020-07-21
    • 2013-05-14
    • 1970-01-01
    相关资源
    最近更新 更多