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

ElC*_*ado 7 python asynchronous multiprocessing python-multiprocessing starmap

我有计算数组*值的索引并返回一个字符串的程序。我使用.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()
Run Code Online (Sandbox Code Playgroud)

我想得到一个 str 数组的结果:

res = ['0', '3', '8', '15', '24', '35']
Run Code Online (Sandbox Code Playgroud)

但我只有结果:

最终结果:位于 0x000001F7C10E51D0 的 multiprocessing.pool.MapResult 对象

如何正确地从中获取价值.starmap_async()?而且,回调不引发。

Dar*_*aut 7

池的异步方法返回的对象在概念上是“显式期货”,您需要调用.get()await 并接收实际结果。所以res.get()会给你你的结果。您还需要self从您的函数中删除,因为您没有在星图调用中传递实例。这目前会导致您的目标函数中出现异常,这也是您的回调不触发的原因。