在Python中进行多处理imap_unordered

问题描述

| 我正在编写一个程序,该程序可以读取多个文件,并将每个文件的摘要写入输出文件。输出文件的大小很大,因此将其保存在内存中并不是一个好主意。我正在尝试开发一种多处理方式。到目前为止,最简单的方法是:
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个摘要已开始计算? 有更好的方法吗? 谢谢。     

解决方法

        “ 1”表示多处理将启动具有四个工作进程的池,并将工作项发送给它们。理想情况下,如果您的系统支持它,即您有四个内核,或者工作程序不完全受CPU限制,则将并行处理4个工作项。 我不知道多处理的实现方式,但是我认为即使在您读出ѭ2the的结果之前,它们也将在内部缓存,即,一旦对第一波中的某项进行了任何处理,就将计算出第五项。 是否有更好的方法取决于您的数据类型。总共需要处理多少个文件,“ 3”个对象的大小等等。如果您有许多文件(例如,超过10k),则可以通过以下方式进行批处理
it = pool.imap_unordered(do,glob.iglob(aglob),chunksize=100)
这样,一个工作项不是一个文件,而是100个文件,并且结果也将按100个批处理报告。如果您有许多工作项,则分块可降低酸洗和取消酸洗结果对象的开销。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...