gpt4 book ai didi

python - python 中的多处理 imap_unordered

转载 作者:太空狗 更新时间:2023-10-30 00:08:24 26 4
gpt4 key购买 nike

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

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

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

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

有更好的方法吗?

谢谢。

最佳答案

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

我不知道 multiprocessing 的实现,但我认为 do 的结果甚至在你读出它们之前就会在内部缓存,即一旦任何进程被计算,就会计算第 5 项完成第一波的项目。

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

it = pool.imap_unordered(do, glob.iglob(aglob), chunksize=100)

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

关于python - python 中的多处理 imap_unordered,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6302284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com