【问题标题】:Python multiprocessing pool number of jobs not correctPython多处理池作业数不正确
【发布时间】:2016-06-05 22:00:19
【问题描述】:

我编写了一个 python 程序来使用池启动并行进程 (16) 来处理一些文件。在运行开始时,进程数保持在 16,直到几乎所有文件都得到处理。然后,由于某些我不明白的原因,当只剩下几个文件时,一次只运行一个进程,这使得处理时间比必要的长得多。你能帮忙吗?

【问题讨论】:

  • 没有任何代码,也没有任何有关您的调度策略的信息,这将很难为您提供帮助。看看stackoverflow.com/help/mcve。
  • 可能每个进程在启动时都有专门的负载。完成后他停下来。
  • 嗨,代码以一种非常简单的方式进行:pool multiprocessing.Pool(processes=16),然后 pool.map(...) 用于将函数映射到参数列表。

标签: python parallel-processing multiprocessing pool


【解决方案1】:

强制map() 使用块大小 1 而不是自己猜测最佳值,例如:

pool = Pool(16)
pool.map(func, iterable, 1)

这应该(理论上)保证在输入数据结束之前工作人员之间的负载分布最佳。

见here

【讨论】:

    【解决方案2】:

    Python 在开始执行您在 Pool 的 applyasync/asyncmap 中指定的进程之前,会为每个工作人员分配一份工作。

    例如,假设您有 8 个文件要处理,并且您启动了一个包含 4 个工作人员的池。

    在开始文件处理之前,将为每个工作人员分配两个特定文件。这意味着,如果某个工人比其他工人更早结束工作,将只是“休息一下”,不会开始帮助其他人。

    【讨论】:

    • 那么,我该怎么做才能确保始终运行最大数量的进程(
    • 始终是最大进程运行数。但要获得更多信息,我将不得不要求一个代码示例。如果没有特定代码,我无法回答更多。
    • 嗨,正如我在回复 hagello 时写的那样,代码以非常简单的方式进行:pool multiprocessing.Pool(processes=16),然后 pool.map(...) 用于映射函数到参数列表,这是要处理的文件列表。谢谢!
    猜你喜欢
    • 2019-02-07
    • 2021-07-24
    • 2020-08-14
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多