【问题标题】:Is there a way to specify a maximum number of cores for a single Process with python multiprocessing?有没有办法使用 python 多处理为单个进程指定最大内核数?
【发布时间】:2022-01-03 02:52:11
【问题描述】:

当我初始化为 p = Process(target=fn),其中fn 是一些函数调用。

有没有一种方法可以指定,比如进程初始化的一个参数,以便在 p 运行时分配给它的最大核心数受给定数量的限制?

我在文档 here 中找不到这样的参数。

【问题讨论】:

  • 我想问一个不同的问题..
  • 您可能会发现如果您可以让您的函数愉快地使用multiprocessing.Pool,您会更好,它会为您提供共享运行时以查看您是否应该进行更多优化工作,特别是如果你有多个函数形式的问题,不需要彼此的结果,但你需要集体输出继续进一步

标签: python parallel-processing multiprocessing


【解决方案1】:

由您的函数来确定它使用(或者更确切地说能够利用)的核心数,而不是您的 Process 实例

我认为这与您的设计方式有些相反,但是除了操作系统分配它们的方式之外,进程并没有锁定到任何甚至某些内核集,通常会为它们提供管理资源的时间( CPU、内存、网络、磁盘..),他们实际上是通过其 API 请求的。

除非您的进程不遗余力地利用多个内核,否则它最多只能利用一个内核(线程),并且总体工作量可能比内核可能少。
但是,许多第 3 方库(例如 NumPy)将利用更多内核,除非通过创建额外线程来指示,通常与系统默认支持的数量一样多。如果是这种情况,您可以调整它们使用的线程数,通常通过参数或环境变量。

看看这些资源


创建后,您可以在新进程上设置操作系统级别的限制(cgroup settings 适用于大多数类似 Linux 的系统)以更改其调度方式,前提是父进程有足够的权限这样做,但这可能会导致性能比预期差(例如,如果您创建 8 个线程,但将使用限制为 2 个内核,则开销时间将浪费在无法获得更多价值的线程之间切换)

另见

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2012-10-30
    • 2011-09-13
    • 2012-10-31
    相关资源
    最近更新 更多