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

标签 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()

我想得到一个str数组的结果:
res = ['0', '3', '8', '15', '24', '35']

但我只有结果:

Final result: multiprocessing.pool.MapResult object at 0x000001F7C10E51D0



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

最佳答案

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

关于python - 如何从 Pool.starmap_async() 中获取结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56455323/

相关文章:

python - 挂细胞 : running multiple jupyter notebooks in parallel with papermill

python - 将 Linux 上的 Python 脚本打包为 Windows 可执行文件

javascript - 生成函数或异步生成函数后清理

python - 有没有办法在等待后检查我传递给协程的参数?

multithreading - 在Linux/UNIX上的多处理情况下是否可以使用互斥锁?

python - 为什么 mp.Pool fast 会失败,而 ProcessPoolExecutor 不会?

python - Python使用命令提示符传递参数

python - flask 日志记录 - 无法将其写入文件

python - 在不同的文件夹中运行另一个 Python 脚本

javascript - 如何编写一个等待事件在 'returning' 之前触发的 node.js 函数?