【问题标题】:Python What is the difference between a Pool of worker processes and just running multiple Processes?Python 工作进程池和只运行多个进程有什么区别?
【发布时间】:2016-01-31 10:43:03
【问题描述】:

我不确定何时使用工作池与多个进程。

processes = []

for m in range(1,5):
       p = Process(target=some_function)
       p.start()
       processes.append(p)

for p in processes:
       p.join()

if __name__ == '__main__':
    # start 4 worker processes
    with Pool(processes=4) as pool:
        pool_outputs = pool.map(another_function, inputs)

【问题讨论】:

    标签: python process multiprocessing pool worker


    【解决方案1】:

    正如它所说的on PYMOTW

    Pool 类可用于管理固定数量的工作人员 可以将要完成的工作分解的简单案例 在工作人员之间独立分配。

    作业的返回值被收集并作为列表返回。

    池参数包括进程数和函数 在启动任务进程时运行(每个子进程调用一次)。

    请查看此处提供的示例,以更好地了解其应用、功能和参数。

    基本上,Pool 是一个助手,在那些需要做的只是消耗公共输入数据、并行处理并产生联合输出的情况下,简化了流程(工作人员)的管理。

    The Pool 做了很多事情,否则你应该自己编写代码(不是太难,但仍然很方便找到预先准备好的解决方案)

    • 输入数据的拆分
    • 目标处理函数被简化:它可以被设计为只期望一个输入元素。池将调用它来提供分配给该工作人员的子集中的每个元素
    • 等待工人完成他们的工作(即加入流程)
    • ...
    • 合并每个工人的输出以产生最终输出

    【讨论】:

    • tl;dr 版本:使用 Pool 轻松实现数据并行。一般不适用于任务并行。
    【解决方案2】:

    以下信息可能有助于您了解 Python 多处理类中 Pool 和 Process 之间的区别:

    池:

    1. 当你有垃圾数据时,你可以使用 Pool 类。
    2. 只有正在执行的进程才会保存在内存中。
    3. I/O 操作:等待直到 I/O 操作完成并且不安排另一个进程。这可能会增加执行时间。
    4. 使用 FIFO 调度程序。

    流程:

    1. 当您有少量数据或功能且需要执行的重复性任务较少时。
    2. 它将所有进程放入内存中。因此,在较大的任务中,它可能会导致内存丢失。
    3. I/O 操作:进程类暂停执行 I/O 操作的进程并并行调度另一个进程。
    4. 使用 FIFO 调度程序。

    【讨论】:

      猜你喜欢
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 2017-06-11
      • 2010-09-17
      • 1970-01-01
      相关资源
      最近更新 更多