循环处理多个文件并将结果存储在字典中 (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 对新问题添加评论到这个答案,如果可以的话,我会看看它。
我想在多个文件上并行执行一个函数,并将结果存储在以文件名作为键的字典中。
但我从中得到的只是字典的每个条目 <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 对新问题添加评论到这个答案,如果可以的话,我会看看它。