簡體   English   中英

多個異步調用阻塞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM