将多处理作业的中间结果转储到文件系统并稍后继续处理

use*_*395 5 python python-multiprocessing

我有一份使用该multiprocessing包并通过以下方式调用函数的工作

resultList = pool.map(myFunction, myListOfInputParameters)

输入参数列表中的每个条目都是独立于其他条目的。

这项工作将运行几个小时。出于安全原因,我想存储定期的结果,例如每小时一次。

当作业被中止并且我想根据最后一个可用备份重新启动它时,我该如何执行此操作并能够继续处理?

Rol*_*ith 3

至少有两种可能的选择。

  1. 让每次调用myFunction将其输出保存到一个唯一命名的文件中。文件名应基于或链接到输入数据。使用父程序收集结果。在这种情况下myFunction,应返回已完成项目的标识符。
  2. 使用imap_unordered而不是map. 这将在结果可用时立即开始生成结果,而不是在所有处理完成后返回。让父程序保存返回的数据以及哪些项目已完成的指示。

在这两种情况下,程序都必须检查先前运行中保存的数据,以便myListOfInputParameters在重新启动时进行调整。

哪个选项最好在很大程度上取决于返回的数据量myFunction。如果数量很大,则将其传回父级会产生巨大的开销。在这种情况下,选项 1 可能是最好的。

由于写入磁盘相对较慢,因此使用选项 2 计算可能会更快。并且父程序更容易跟踪进度。

请注意,您也可以与选项 1 一起使用imap_unordered