循环处理多个文件并将结果存储在字典中 (python 3)

multiprocessing multiple files in loop and store results in dictionary (python 3)

我想在多个文件上并行执行一个函数,并将结果存储在以文件名作为键的字典中。

但我从中得到的只是字典的每个条目 <multiprocessing.pool.ApplyResult at 0x7f37065fac40>

如何直接获取每个词典条目中的结果?

此外,我想监控整个任务的进度(处理了多少文件(例如打印文件 i/total)。

我尝试了以下方法:

from multiprocessing import Pool
import os

def process(file):
    # processings ...
    return results


pool = Pool()
result_dict = {}
for file in os.listdir("<DIRPATH>"):
    result_dict[file] = pool.apply_async(process, file)
pool.close()
pool.join()

multiprocessing.pool.Pool.apply_async 方法 return 是一个 multiprocessing.pool.AsyncResult 代表“未来”结果的实例。也就是说,要获得实际结果,您必须在此实例上调用方法 get,该方法将阻塞直到实际结果可用,然后 return 该结果。所以,你需要修改你的代码如下:

from multiprocessing import Pool
import os

def process(file):
    # processings ...
    return results


pool = Pool()
result_dict = {}
for file in os.listdir("<DIRPATH>"):
    result_dict[file] = pool.apply_async(process, file)
for k, v in result_dict.items():
    # Update key with the actual result:
    result_dict[k] = v.get()
pool.close()
pool.join()

至于你关于显示进度的第二个问题,你必须 post 一个新问题(你不能 post 在一个 posting 上提出多个完全不相关的问题) .如果你愿意,一旦你这样做了,你可以用 link 对新问题添加评论到这个答案,如果可以的话,我会看看它。