我正在尝试理解asyncio是Python协程定义的必要部分,还是仅仅是一个方便的包。
我可以在没有异步的情况下运行这个程序吗?
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。
发布于 2021-04-14 15:38:18
要运行异步函数,您需要提供一个事件循环。asyncio的主要功能之一就是提供这样一个循环:当您执行asyncio.run(process)时,它在内部提供一个循环。
此代码在notebook中有效的原因是ipython (以及Jupyter REPL)在幕后提供了循环;还有其他第三方库提供循环,例如trio和curio。
也就是说,您可以自由地提供自己的循环,而不是使用库,如this answer中所示。但实际上,这样做是没有意义的,因为asyncio是Python标准库的一部分。
https://stackoverflow.com/questions/65761651
复制相似问题