htop 显示的信息不一致

htop 显示的信息不一致

我正在运行一个计算密集型串行 Python 脚本,而 htop 给出的信息不一致。它显示一个线程的使用率几乎达到 100%,但 Python 并未使用任何 CPU 能力。有人知道为什么 Python 没有被列为使用大量 CPU 能力吗?我正在使用 tmux 来分割屏幕,以便您可以看到所有信息。

我的代码、正在运行的脚本和 htop 的屏幕截图

答案1

标准 Python 解释器 (CPython) 是单线程的。这是由所谓的“全局解释器锁”(GIL) 要求的,它不允许同时真正并发访问 Python 对象。参见例如https://wiki.python.org/moin/GlobalInterpreterLock了解详情。

因此,常规 Python 脚本(例如不使用multiprocessing库来生成多个解释器进程)一次只能在一个 CPU 线程上运行。这意味着在具有四个线程的处理器(具有超线程的双核)上,它最多只能消耗所有线程总 CPU 时间的 25%,或单个 CPU 线程的 100%。

因此,正如 htop 报告的那样,您的脚本几乎占用了一个 CPU 线程的 100%,因此它实际上以最大速度运行。这里没有什么不寻常的。

如果脚本是你的,你可以尝试调整或重写它,以便通过使用multiprocessing图书馆如前所述。但并非所有代码都可以并行化。如果你不能真正改变脚本,你就必须接受它的运行方式。

相关内容