My code:
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'
三次,但每次之前都会等待 2 秒'test'
分别(所以最后'test'
6 秒后打印)。
我理解错了什么,如何修复它以按我的预期工作?
await
暂停当前函数的执行,直到 future 返回。在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))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)