在Python的asyncio库中,哪些方法创建事件循环?是 asyncio.run() / asyncio.get_event_loop() 吗?还有哪些方法开始运行事件循环?我尝试寻找;但似乎没有很明确的答案。
对于高级 API,它是通过
asyncio.run()
或通过 asyncio.new_event_loop()
函数(如果提供)在 loop_factory
中自动创建的。在低级 API 中,它是 asyncio.new_event_loop()
。 asyncio.get_event_loop()
返回正在运行的事件循环,或者如果未运行,则返回策略的事件循环 (asyncio.get_event_loop_policy().get_event_loop()
)。它不会创建新的事件循环。
在 asyncio 中,我们有高级和低级 API。高级 API 适合需要运行具有 3 或 5 个异步函数的简单应用程序的情况。反过来,低级 API 需要控制创建事件循环、管理 Future 实例属性(如名称、运行状态等)、策略设置等的过程。
asyncio.run()
通过 asyncio.new_event_loop()
或通过 loop_factory
函数(如果提供)asyncio.new_event_loop()
在低级 API 中asyncio.run()
有四件事:
asyncio.set_event_loop()
asyncio.loop.create_task()
将异步函数放入事件循环,其中循环是 asyncio.SelectorEventLoop
或 asyncio.ProactorEventLoop
,取决于系统asyncio.run_until_complete()
asyncio.new_event_loop()
创建第一个子句,因此您需要像第二个子句一样手动设置一个新的事件循环并运行
如上所述,
asyncio.run()
自动设置一个新的事件循环。对于低级 API,我们可以使用:
asyncio.loop.run_until_complete()
asyncio.loop.run_forever()
从名称上可以清楚地看出,第一个将运行到最后完成的任务,第二个将永远运行