[英]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)在底層提供了一個循環; 還有其他提供循環的第三方庫,例如trio
和curio
。
話雖如此,您可以自由地提供自己的循環而不是使用庫,如本答案所示。 但實際上這樣做沒有意義,因為asyncio
是 Python 標准庫的一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.