跳转到主要内容

GLib事件循环集成于asyncio

项目描述

GLib事件循环集成于asyncio

此模块提供Python 3 asyncio事件循环实现,利用GLib事件循环。这允许在同一个线程中混合asyncio和某些基于GLib的代码。

启用此事件循环可以通过以下代码实现

import asyncio
import asyncio_glib
asyncio.set_event_loop_policy(asyncio_glib.GLibEventLoopPolicy())

在此点,asyncio.get_event_loop()将返回一个GLibEventLoop

实现策略

为了简化维护,我尽量重用标准库asyncio代码尽可能多的部分。为此,我创建了一个GLib实现selectors.BaseSelector API。结合现有的asyncio.SelectorEventLoop类,我们就有了事件循环实现。

为了测试事件循环是否功能正常,我重用了标准库测试套件的部分来针对新的选择器和事件循环运行。

目前选择器是私有selectors._BaseSelectorImpl类的子类,这可能是未来兼容性问题的潜在来源。如果发生这种情况,保留该代码的本地副本是一个选项。

与Gbulb的比较

Gbulb是另一个基于GLib的asyncio事件循环实现。主要区别在于

  • Gbulb直接从GLib主循环中调度asyncio回调。相比之下,asyncio-glib迭代GLib主循环,直到asyncio事件就绪,然后由asyncio事件循环调度事件。

  • Gbulb有一些Windows兼容性代码,而asyncio-glib在该平台上没有进行测试。

  • asyncio-glib是基本未修改的SelectorEventLoop,因此应该能够自动获得Python新版本的所有新功能。

asyncio-glib代码库的大小大约是Gbulb的十分之一。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

asyncio-glib-0.1.tar.gz (13.3 kB 查看哈希)

上传时间

构建分布

asyncio_glib-0.1-py3-none-any.whl (13.9 kB 查看哈希)

上传时间 Python 3

支持