python - 如何从 Pool.starmap_async() 中获取结果?
问题描述
我有程序计算数组*值的索引并返回一个字符串。我使用.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']
但我只有结果:
最终结果:0x000001F7C10E51D0 处的 multiprocessing.pool.MapResult 对象
如何正确获取价值.starmap_async()
?此外,回调不会引发。
解决方案
Pool 的异步方法返回概念上是“显式期货”的对象,您需要调用.get()
await 并接收实际结果。所以res.get()
会给你你的结果。您还需要self
从函数中删除,因为您没有通过星图调用传递实例。这目前会导致您的目标函数中出现异常,这也是您的回调不触发的原因。
推荐阅读
- python - Python中的锯齿线
- python - 信号发出后 QML AppWindow 不更新
- jquery - 在 React JQuery 上将 Https 替换为 http
- sql - SQL Server - 选项窗口中的重叠文本
- php - 将邮件服务器添加到 PHP 页面
- html - 在 Chrome 中从 HTML 打印 PDF
- excel - 试图找到一种方法防止在 Excel VBA 中出现类型不匹配错误
- c# - 将 json 字符串反序列化为结构会导致异常
- python - Selenium python-如果我的脚本在调用 driver.close() 之前失败,并且我再次调用该函数,我会打开两个驱动程序吗?
- laravel - 如何使用 Guzzle 在我的 Laravel API 上发布和接收数据