作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 Python 中按顺序等待协程列表,即我不想使用 asyncio.gather(*coros)
。这样做的原因是我正在尝试调试我的应用程序,所以我想传递一个命令行开关让事情按特定顺序运行,这样每次应用程序运行时我都能获得一致的行为。
我试过这样做:
if args.sequential:
fields = [await coro for coro in coros]
else:
fields = await asyncio.gather(*coros)
但顺序版本似乎无法正常工作,即我收到此警告:
sys:1: RuntimeWarning: coroutine 'get_fields' was never awaited
我做错了什么?
最佳答案
一旦在某个地方创建了协程,asyncio
期望在事件循环关闭之前(在脚本完成执行之前)等待它:
import asyncio
async def bla():
await asyncio.sleep(1)
print('done')
async def main():
bla() # Create coro, but don't await
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
结果:
RuntimeWarning: coroutine 'bla' was never awaited
我们需要这个警告,因为很容易忘记 await
而从未等待过的协程几乎总是意味着错误。
由于您的一个 async_op
抛出了错误,因此在脚本完成时从未等待过之前创建的一些协程。这就是你收到警告的原因。
换句话说,发生了这样的事情:
async def bla1():
print('done')
async def bla2():
raise Exception()
async def main():
b1 = bla1()
b2 = bla2() # but here is exception ...
await bla1() # ... and this line was never reached
关于Python:依次等待协程列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49686286/
我不知道如何描述这一点。我在一个页面上有几个 div,类似于: some lorem ipsum text here Macbeth s
我是一名优秀的程序员,十分优秀!