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

问题描述 投票:8回答:2

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

processes = []

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

for p in processes:
       p.join()

VS

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
2个回答
5
投票

正如它说on PYMOTW

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

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

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

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

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

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

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

0
投票

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

池:

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

处理:

  1. 当您拥有较少的数据或功能以及较少重复的任务时。
  2. 它将所有进程都放在内存中。因此,在较大的任务中,它可能会导致内存丢失。
  3. I / O操作:进程类暂停执行I / O操作的进程并并行调度另一个进程。
  4. 使用FIFO调度程序。
© www.soinside.com 2019 - 2024. All rights reserved.