【问题标题】:python asyncio coroutine was never awaitedpython asyncio协程从未被等待
【发布时间】:2020-07-03 10:09:44
【问题描述】:

我正在使用带有此代码的 python 3.8

async def main():
    pass

async def build():
    pass

asyncio.create_task(build())
loop = asyncio.get_event_loop()
asyncio.create_task(main())
pending = asyncio.all_tasks()
loop.run_until_complete(asyncio.gather(*pending))

并得到以下错误

sys:1: RuntimeWarning: coroutine 'build' 从未等待

我在这里缺少什么?不应该运行直到完成等待所有任务完成?

【问题讨论】:

  • 在该警告之前您是否有其他异常?如果是这样,您应该将它们包括在问题中。例如,当我在 Python 3.7 下运行您的代码时,在对 asyncio.create_task(...) 的调用中出现“没有运行事件循环”异常。

标签: python python-asyncio coroutine


【解决方案1】:

由于创建任务时循环没有运行,asyncio 无法将任务附加到它。

可以通过将asyncio.create_task() 替换为loop.create_task() 来解决此问题。

可以使用asyncio.gather(..., return_exceptions=True) 检索完整的错误,因此gather() 将引发RuntimeError: no running event loop

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-10
    • 2022-11-19
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 2021-10-29
    • 2018-06-05
    • 1970-01-01
    相关资源
    最近更新 更多