我编写了一个python程序来使用pool启动并行进程(16)来处理一些文件。在运行开始时,进程数保持为16,直到几乎所有文件都被处理完毕。然后,由于某些我不理解的原因,当只剩下几个文件时,一次只运行一个进程,这使得处理时间比必要时间长得多。你能帮帮忙吗?
答案 0 :(得分:1)
强制map()
使用1的chunksize而不是自己猜测最佳值,例如:
pool = Pool(16)
pool.map(func, iterable, 1)
这应该(理论上)保证工人之间的负荷分配,直到输入数据结束。
请参阅here
答案 1 :(得分:0)
Python,在开始执行您在Pool的applyasync / asyncmap中指定的进程之前,为每个worker分配一部分工作。
例如,假设您要处理8个文件,并启动一个包含4个工作程序的池。
在开始文件处理之前,将为每个工作人员分配两个特定文件。这意味着如果某个工人比其他工人更早地结束工作,那么只需“休息一下”并且不会开始帮助其他人。