python中的多处理imap_unordered

Her*_*nan 6 python multiprocessing

我正在制作一个程序来读取多个文件,并将每个文件的摘要写入输出文件.输出文件的大小相当大,因此将其保存在内存中并不是一个好主意.我正在尝试开发一种多处理方式.到目前为止,我能够提供的最简单的方法是:

pool = Pool(processes=4)
it = pool.imap_unordered(do, glob.iglob(aglob))
for summary in it:
    writer.writerows(summary)
Run Code Online (Sandbox Code Playgroud)

do是汇总文件的函数.writer是一个csv.writer对象

但事实是,我仍然完全不了解multiprocessing.imap.这是否意味着4个摘要是并行计算的,当我读取其中一个时,第5个开始计算?

有没有更好的方法呢?

谢谢.

Tor*_*rek 4

processes=4意味着多处理将启动一个包含四个工作进程的池并将工作项发送给它们。理想情况下,如果您的系统支持它,即您有四个核心,或者工作人员不完全受 CPU 限制,则将并行处理 4 个工作项。

我不知道多重处理的实现,但我认为即使在读出结果之前,结果do也会在内部缓存,即一旦对第一波中的项目完成任何处理,就会计算第五项。

是否有更好的方法取决于您的数据类型。总共有多少个文件需要处理,summary对象有多大等。如果您有很多文件(例如,超过 10k),可以选择对它们进行批处理,通过

it = pool.imap_unordered(do, glob.iglob(aglob), chunksize=100)
Run Code Online (Sandbox Code Playgroud)

这样,一个工作项就不是一个文件,而是 100 个文件,并且结果也以 100 个为一批进行报告。如果您有许多工作项,分块会降低对结果对象进行 pickle 和 unpickle 的开销。