[英]Multiple async calls blocking
我的代碼:
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秒打印)。
我理解錯了什么,如何按照我的預期解決這個問題呢?
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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.