我可以 运行 Python 没有 asyncio 的协程吗?

Can I run Python Coroutines without asyncio?

我正在尝试了解 asyncio 是否是 Python 协程定义的必要部分,或者仅仅是一个便利包。

我可以 运行 这个程序没有 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 中的这段代码 运行s(没有 运行() 函数)。我只是输入 await process.

对于运行异步函数,你需要提供一个事件循环。 asyncio 的主要功能之一是提供这样一个循环:当您执行 asyncio.run(process) 时,它会在内部提供一个循环。

此代码在笔记本中运行的原因是 Jupyter(以及 ipython REPL)提供了一个底层循环;还有其他提供循环的第三方库,比如triocurio.

也就是说,您可以自由提供自己的循环而不是使用库,如 中所示。但实际上这样做没有意义,因为 asyncio 是 Python 标准库的一部分。