Python工作进程池和运行多个进程之间有什么区别?

whi*_*kar 9 python pool process worker multiprocessing

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

processes = []

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

for p in processes:
       p.join()
Run Code Online (Sandbox Code Playgroud)

VS

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

Pyn*_*hia 5

正如PYMOTW所说:

Pool类可用于管理固定数量的工作人员,以处理可以在工作人员之间独立分配和分配工作的简单情况.

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

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

请查看那里给出的示例,以便更好地了解其应用,功能和参数.

基本上,Pool是一个帮助器,在需要做的就是消耗常用输入数据,并行处理并生成联合输出的情况下,简化了进程(工作者)的管理.

游泳池做了很多事情,否则你应该自己编码(不是太难,但仍然,找到预先制作的解决方案很方便)

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

  • tl;dr 版本:使用 Pool 来轻松实现数据并行性。不适用于任务并行性。 (2认同)

ANK*_*ANK 5

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

水池:

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

过程:

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