如何将 asyncio 与外部事件循环集成?

How can I integrate asyncio with an external event loop?

我正在编写一个事件驱动程序,其中的事件调度是用 C 语言编写的。该程序使用 Python 作为扩展模块。我想让扩展模块使用 async/await 语法来实现协程。协程只会与我的程序的一部分交互,不涉及 IO。我的 C 调度程序是单线程的,我需要协程在其线程中执行。

在纯Python程序中,我会直接使用asyncio,让我的程序使用它的事件循环来驱动所有事件。然而,这不是一种选择;我的事件循环需要每秒处理数百万个基于 C 的事件,我负担不起 Python 的开销。

我尝试编写自己的事件循环实现,将所有调度委托给我的 C 调度程序。我尝试了几种方法:

关于如何最好地做到这一点有什么想法吗?其他人是怎么解决这个问题的?

我发现 trio, a third-party alternative to asyncio, provides explicit support for integration with alien event loops through something called guest mode。解决了我的问题!