【问题标题】:How does Python's subprocess and multiprocessing packages interoperate?Python 的 subprocess 和 multiprocessing 包如何互操作?
【发布时间】:2015-09-08 17:22:52
【问题描述】:

我想使用多处理将工作分散到系统的多个内核上。作为工作的一部分,他们将运行subprocess.call(..., shell=True)。当他们这样做时会发生什么?子进程分叉是否保留在该核心上?

【问题讨论】:

  • 你试过了吗?通常,新进程由操作系统调度。
  • 可能不会。您通常必须将进程显式绑定到核心。执行此操作的方法取决于操作系统。

标签: python subprocess python-multiprocessing


【解决方案1】:

如果主要工作是在使用subprocess 模块创建的子进程中完成的,那么您不需要multiprocessing 将工作分散到多个 CPU 内核上。见Python threading multiple bash subprocesses?

当他们这样做时会发生什么?

subprocess.call() 运行外部命令并等待它完成。是否在multiprocessing 模块创建的工作进程中启动并不重要。

子进程分叉是否保留在该核心上?

如果你需要它;您应该明确设置 CPU 亲和性。 psutil provides a portable way to set/get CPU affinity for a process.

如果你使用numpy 那么它可能会影响cpu 亲和力。见Why does multiprocessing use only a single core after I import numpy?

【讨论】:

  • 感谢您提供详细信息。
猜你喜欢
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
相关资源
最近更新 更多