Python多处理池的作业数量不正确

时间:2016-02-23 21:06:53

标签: python parallel-processing multiprocessing pool

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

2 个答案:

答案 0 :(得分:1)

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

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

这应该(理论上)保证工人之间的负荷分配,直到输入数据结束。

请参阅here

答案 1 :(得分:0)

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

例如,假设您要处理8个文件,并启动一个包含4个工作程序的池。

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