有没有办法在Python中指定asyncio REPL的事件循环类型?

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

我正在用 Python 编写一些使用 asyncio 模块的网络代码,并且我喜欢经常使用 -m asyncio 中的 Python REPL 来测试示例。但我注意到 asyncio REPL 的默认事件循环类型会根据操作系统的不同而变化。例如,在 Linux 上它使用选择器事件循环,而在 Windows 上它使用 Proactor。

我的问题是:

  1. 有什么方法可以指定 asyncio REPL 使用什么事件循环(无需自己修补模块,这显然可以工作。)
  2. 后续问题 - 如果没有 - 是否有办法用另一种类型的事件循环替换线程中正在运行的事件循环?

让我知道你的想法。

python python-asyncio read-eval-print-loop
1个回答
0
投票

是的,你是对的。 asyncio 模块使用的默认事件循环可能取决于操作系统。通常选择最适合平台的默认值。

在 Linux 上,默认事件循环通常是 SelectorEventLoop,在 Windows 上,它是 ProactorEventLoop。这是因为这些平台上的底层 I/O 模型不同。 SelectorEventLoop 基于 select 系统调用,非常适合 Linux,而 ProactorEventLoop 基于 Windows Proactor I/O 模型。

如果您想显式设置事件循环类型,您可以在代码中执行此操作。例如,如果你总是想使用SelectorEventLoop,你可以明确地设置它:

import asyncio

asyncio.set_event_loop(asyncio.SelectorEventLoop())

或者,如果你想检查当前正在使用哪个事件循环,你可以这样做:

import asyncio

loop = asyncio.get_event_loop()
print(f"Current event loop: {type(loop)}")
© www.soinside.com 2019 - 2024. All rights reserved.