簡體   English   中英

我可以在沒有異步的情況下運行 Python 協程嗎?

[英]Can I run Python Coroutines without asyncio?

我試圖了解 asyncio 是否是 Python 協程定義的必要部分,或者只是方便 package。

我可以在沒有 asyncio 的情況下運行這個程序嗎?

import time

async def clk():
    time.sleep(0.1)

async def process():
    for _ in range(2):
        await clk();
        time.sleep(0.2)
        print("I am DONE waiting!")

def run():
    await process()

if __name__ == "__main__":
    run()

我得到了run()沒有用async定義的錯誤,我得到了,但似乎有一個無限的回歸到頂部。 有趣的是,這段代碼在 Jupyter notebook 中運行(沒有 run() 函數)。 我只是輸入await process

要運行異步函數,您需要提供一個事件循環。 asyncio的主要功能之一是提供這樣的循環:當您執行asyncio.run(process)時,它會在內部提供一個循環。

這段代碼在筆記本中運行的原因是 Jupyter(以及ipython REPL)在底層提供了一個循環; 還有其他提供循環的第三方庫,例如triocurio

話雖如此,您可以自由地提供自己的循環而不是使用庫,如本答案所示 但實際上這樣做沒有意義,因為asyncio是 Python 標准庫的一部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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