Python:进程池和多进程运行有什么区别?

13

我不确定何时使用工作进程池(pool of workers)和多个进程(multiple processes)。

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)
2个回答

8
正如PYMOTW所述:

Pool类可用于管理一定数量的工作进程,以便在简单情况下将要执行的工作分解并分配给工作进程。

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

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

请查看其中提供的示例,以更好地理解其应用、功能和参数。
基本上,池是一个辅助程序,在那些情况下,所有它们需要做的就是消耗共同的输入数据,以并行方式处理它并生成联合输出时,可以简化进程(工作人员)的管理。
池做了很多事情,否则你应该自己编写代码(不太难,但仍然很方便找到一个预先烹制的解决方案)
例如:
  • 输入数据的拆分
  • 目标进程函数被简化:它只能设计为仅期望一个输入元素。池将调用它,为每个分配给该工作进程的子集提供每个元素
  • 等待工作人员完成他们的工作(即加入进程)
  • ...
  • 合并每个工作进程的输出以生成最终输出

2
简短版:使用Pool轻松实现数据并行,但不适用于任务并行。 - RobertB

8
以下信息可能有助于您理解Python多进程类中池和进程之间的区别:
池:
1.当您有大量数据时,可以使用池类。
2.只有正在执行的进程保留在内存中。
3.I/O操作:它等待I/O操作完成,不会安排另一个进程。这可能会增加执行时间。
4.使用FIFO调度程序。
进程:
1.当您有少量数据或功能以及较少的重复任务要执行时。
2.它将所有进程放入内存中。因此,在较大的任务中,可能会导致内存损失。
3.I/O操作:进程类暂停执行I/O操作的进程并并行安排另一个进程。
4.使用FIFO调度程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接