Skip to content
An implementation of the Python 3 asyncio event loop on top of GLib
Python
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
asyncio_glib asyncio_glib: add some docstrings Aug 14, 2019
tests travis: add CI configuration Aug 1, 2019
.gitignore
.travis.yml travis: add CI configuration Aug 1, 2019
COPYING.LGPL setup: update setuptools build Aug 22, 2019
MANIFEST.in setup: update setuptools build Aug 22, 2019
README.md README: add some more notes comparing with Gbulb Aug 1, 2019
requirements.txt travis: add CI configuration Aug 1, 2019
setup.py setup: update setuptools build Aug 22, 2019

README.md

GLib event loop integration for asyncio

This module provides a Python 3 asyncio event loop implementation that makes use of the GLib event loop. This allows for mixing of asyncio and some GLib based code within the same thread.

Enabling this event loop can be achieved with the following code:

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

At this point, asyncio.get_event_loop() will return a GLibEventLoop.

Implementation strategy

To ease maintenance, I have tried to reuse as much of the standard library asyncio code as possible. To this end, I created a GLib implementation of the selectors.BaseSelector API. Combine this with the existing asyncio.SelectorEventLoop class, and we have our event loop implementation.

To test that the event loop is functional, I have reused parts of the standard library test suite to run against the new selector and event loop.

At present the selector sublcasses the private selectors._BaseSelectorImpl class, which is a potential source of future compatibility problems. If that happens, taking a local copy of that code is an option.

Comparison with Gbulb

Gbulb is another implementation of the asyncio event loop on top of GLib. The main differences are:

  • Gbulb dispatches asyncio callbacks directly from the GLib main loop. In contrast, asyncio-glib iterates the GLib main loop until an asyncio event is ready and then has asyncio event loop dispatch the event.

  • Gbulb has some Windows compatibility code, while asyncio-glib has had no testing on that platform.

  • asyncio-glib is an essentially unmodified SelectorEventLoop, so should automatically gain any features from new Python releases.

The asyncio-glib code base is also about one tenth of the size of Gbulb.

You can’t perform that action at this time.