我正在制作一个程序,它读取多个文件并将每个文件的摘要写入输出文件。输出文件的大小相当大,因此将它保存在内存中不是一个好主意。我正在尝试开发一种多处理方式。到目前为止,我能够使用的最简单的方法是:多处理imap_unordered在python
pool = Pool(processes=4)
it = pool.imap_unordered(do, glob.iglob(aglob))
for summary in it:
writer.writerows(summary)
do是汇总文件的函数。作家是一个csv.writer对象
但事实是,我仍然不明白multiprocessing.imap完全。这是否意味着4个摘要是并行计算的,并且当我读取其中的一个时,第5个开始计算?
有没有更好的方法来做到这一点?
谢谢。
”组块可降低酸洗和取消结果对象的开销。“ - 那么为什么不做'chunksize = len(iterable)/进程数量?什么是折衷? – 2012-08-24 16:34:30
@AdamParkin每个项目可能不会被处理器以相同的速度处理,您希望有一堆“准备好分派”项目来填充等待中的处理器。 – Zenon 2012-10-18 03:38:51
嗯,我想你应该有'max(3 * nproc,len(it))'作业,然后。意思是'chunksize = len(it)/ max(3 * nproc,len(it))'。还是有很好的启发式? – 2015-10-23 11:15:49