如何从 Pool.starmap_async() 中获取结果



>我有程序计算array*value的索引并返回一个字符串。我使用 .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']

但我只有结果:

最终结果:multiprocessing.pool.MapResult 对象在 0x000001F7C10E51D0

如何正确从.starmap_async()中获取价值?此外,回调不会引发。

Pool 的异步方法返回在概念上是"显式未来"的对象,您需要调用 .get() 来等待并接收实际结果。所以res.get()会给你结果。您还需要从函数中删除self,因为您不会沿 starmap 调用传递实例。这目前会导致目标函数中出现异常,这也是回调不触发的原因。

相关内容

  • 没有找到相关文章

最新更新