我可以 运行 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)提供了一个底层循环;还有其他提供循环的第三方库,比如trio
和curio
.
也就是说,您可以自由提供自己的循环而不是使用库,如 中所示。但实际上这样做没有意义,因为 asyncio
是 Python 标准库的一部分。
我正在尝试了解 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)提供了一个底层循环;还有其他提供循环的第三方库,比如trio
和curio
.
也就是说,您可以自由提供自己的循环而不是使用库,如 asyncio
是 Python 标准库的一部分。