我的代码:
import asyncio
async def test(i):
await asyncio.sleep(i)
print('test')
async def main():
await test(2)
await test(2)
await test(2)
asyncio.get_event_loop().run_forever(main())
我希望它能够睡三秒钟,然后打印出'test'
三次,而是在每个'test'
之前分别等待2秒(所以最后'test'
打印出来6秒)。
我有什么理解错误,我如何解决这个问题按照我的预期工作?
答案 0 :(得分:5)
await
暂停执行当前函数,直到将来返回。在test
中,这使得函数在打印之前等待2秒,直到asyncio.sleep
返回。在main
中,它使函数等到test
返回(在print
返回后sleep
之后执行),然后继续执行下一行下一个await test
。
如果您想同时执行所有test
并在两秒钟后立即打印它们,则可以使用asyncio.gather
:
async def main():
await asyncio.gather(test(2), test(2), test(2))
这会同时在事件循环上安排三个test
协同程序,并等待所有组合结果,这些结果将在~2秒内到达。
你也可以在没有等待完成的情况下解雇和忘记协同程序:
def main():
asyncio.ensure_future(test(2))
asyncio.ensure_future(test(2))
asyncio.ensure_future(test(2))