【问题标题】:Is a python processed pinned to one CPU, or can it uses multiple CPU overtime?处理过的 python 是固定在一个 CPU 上,还是可以使用多个 CPU 超时?
【发布时间】:2019-01-07 20:31:18
【问题描述】:

所以我知道即使是多线程的python进程也不能同时使用多个核心。 但是,默认情况下,这是否意味着 python 进程被“固定”到一个 CPU 上?固定,我的意思是,python 进程是否总是使用相同的 CPU,或者相同的进程是否可以超时使用我机器的不同 CPU?

【问题讨论】:

  • 这是特定于操作系统的。操作系统通常会在它认为合适的时候围绕 CPU 迁移进程。
  • 我从来没有听说过有自动固定的操作系统——这将是一件非常愚蠢的事情,因为你会浪费资源:假设你启动了 10 个进程,然后退出所有随机分配给 CPU 2 的。CPU 1 现在是 100%,CPU 2 是 0%?太傻了。
  • 此外,有些具有特殊命令,可用于设置 CPU 亲和性,将其固定到特定 CPU。例如:howtogeek.com/howto/windows-vista/…
  • ...无论如何,这与 Python 或 GIL 的 无关。 GIL 会阻止您同时使用多个 CPU(对于需要保留它的操作)。固定是指不在 CPU 之间移动,这与您同时使用多少个 CPU 完全无关。
  • 这不是一个 python 问题。它完全取决于操作系统调度程序的实现。在 Linux 上,您可以使用 taskset 指定您的进程要使用的一个或多个核心。

标签: python processor gil


【解决方案1】:

默认情况下,python 进程不固定到特定的 CPU 内核。事实上,尽管有 GIL,单个 python 进程可以产生多个线程——每个线程都可以由操作系统在不同的 CPU 内核上同时调度。尽管 GIL 使多个线程难以在任何给定时间实际取得进展(因为它们都必须争夺锁),但即使这种情况也可能发生(本机代码可以释放 GIL,除非/直到它需要访问 Python 数据结构)。

当然,您可以使用操作系统实用程序将任何进程(包括 Python)固定到特定的 CPU 内核。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 2015-07-17
    • 2020-09-04
    • 2016-07-02
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多