【发布时间】:2021-09-28 04:05:55
【问题描述】:
我正在尝试检查 asyncio 模块的 wait 方法。我有这个原始的测试应用程序作为游乐场:
import asyncio
async def foo():
return 1 # datetime.datetime.now()
async def entry_point():
coros = [foo()]*3
done, pending = await asyncio.wait(coros, return_when=asyncio.FIRST_COMPLETED)
for obj in done:
print(obj._result) # works, but seem dirty
asyncio.run(entry_point())
基本上,我的目标是获得第一个完成任务的结果。这是我在术语上有点困惑。文档说asyncio.wait
返回两组任务/未来:(完成,待定)。
我如何知道对象是task 还是future?
主要问题是,如何提取成功结束任务的结果?
一种方法是访问受保护的属性_result(如我的代码 sn-p 所示)。但我觉得有一种更清洁的方法可以做到这一点。实现这一目标的正确模式是什么?
https://docs.python.org/3/library/asyncio-task.html#waiting-primitives
【问题讨论】:
-
您是否查看了链接中记录的
FIRST_COMPLETED选项?
标签: python-asyncio