Python Asyncio 中的偶数循环创建

问题描述 投票:0回答:1

在Python的asyncio库中,哪些方法创建事件循环?是 asyncio.run() / asyncio.get_event_loop() 吗?还有哪些方法开始运行事件循环?我尝试寻找;但似乎没有很明确的答案。

python python-asyncio event-loop
1个回答
0
投票

TL;博士

对于高级 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的结构

asyncio 中,我们有高级和低级 API。高级 API 适合需要运行具有 3 或 5 个异步函数的简单应用程序的情况。反过来,低级 API 需要控制创建事件循环、管理 Future 实例属性(如名称、运行状态等)、策略设置等的过程。

创建新的事件循环

  • asyncio.run()
    通过
    asyncio.new_event_loop()
    或通过
    loop_factory
    函数(如果提供)
  • asyncio.new_event_loop()
    在低级 API 中

他们如何工作?

asyncio.run()
有四件事:

  1. 通过上面的函数创建一个新的事件循环
  2. 通过
    asyncio.set_event_loop()
  3. 在当前线程中设置新的事件循环
  4. 通过
    asyncio.loop.create_task()
    将异步函数放入事件循环,其中循环是
    asyncio.SelectorEventLoop
    asyncio.ProactorEventLoop
    ,取决于系统
  5. 通过
    asyncio.run_until_complete()
  6. 启动事件循环

asyncio.new_event_loop()
创建第一个子句,因此您需要像第二个子句一样手动设置一个新的事件循环并运行

启动事件循环

如上所述,

asyncio.run()
自动设置一个新的事件循环。对于低级 API,我们可以使用:

  • asyncio.loop.run_until_complete()
  • asyncio.loop.run_forever()

从名称上可以清楚地看出,第一个将运行到最后完成的任务,第二个将永远运行

© www.soinside.com 2019 - 2024. All rights reserved.