如何从 Pool.starmap_async() 得到结果?
How to get result from Pool.starmap_async()?
我有一个程序可以计算 array*value 的索引和 returns 一个字符串。我使用 .starmap_async()
是因为我必须将两个参数传递给我的异步函数。该程序如下所示:
import multiprocessing as mp
from multiprocessing import freeze_support
def go_async(self, index, value) :
return str(index * int(value))
def log_result(self, result):
print("Succesfully get callback! With result: ", result)
def main() :
array = [1,3,4,5,6,7]
pool = mp.Pool()
res = pool.starmap_async(go_async, enumerate(array), callback = log_result)
print("Final result: ", res)
pool.close()
pool.join()
if __name__ == '__main__':
freeze_support()
main()
我想得到一个 str 数组的结果:
res = ['0', '3', '8', '15', '24', '35']
但我只有结果:
Final result: multiprocessing.pool.MapResult object at
0x000001F7C10E51D0
如何正确获取.starmap_async()
的值?
此外,回调不会引发。
Pool 的 async-methods return 概念上的对象 "explicit futures",您需要调用 .get()
等待并接收实际结果。
所以 res.get()
会给你结果。您还需要从函数中删除 self
,因为您没有在 starmap-call 中传递实例。这目前会导致您的目标函数出现异常,这也是您的回调未触发的原因。
我有一个程序可以计算 array*value 的索引和 returns 一个字符串。我使用 .starmap_async()
是因为我必须将两个参数传递给我的异步函数。该程序如下所示:
import multiprocessing as mp
from multiprocessing import freeze_support
def go_async(self, index, value) :
return str(index * int(value))
def log_result(self, result):
print("Succesfully get callback! With result: ", result)
def main() :
array = [1,3,4,5,6,7]
pool = mp.Pool()
res = pool.starmap_async(go_async, enumerate(array), callback = log_result)
print("Final result: ", res)
pool.close()
pool.join()
if __name__ == '__main__':
freeze_support()
main()
我想得到一个 str 数组的结果:
res = ['0', '3', '8', '15', '24', '35']
但我只有结果:
Final result: multiprocessing.pool.MapResult object at 0x000001F7C10E51D0
如何正确获取.starmap_async()
的值?
此外,回调不会引发。
Pool 的 async-methods return 概念上的对象 "explicit futures",您需要调用 .get()
等待并接收实际结果。
所以 res.get()
会给你结果。您还需要从函数中删除 self
,因为您没有在 starmap-call 中传递实例。这目前会导致您的目标函数出现异常,这也是您的回调未触发的原因。