Skip to main content

GLib event loop integration for asyncio

Project description

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.

Project details


Release history Release notifications | RSS feed

This version

0.1

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

asyncio-glib-0.1.tar.gz (13.3 kB view details)

Uploaded Source

Built Distribution

asyncio_glib-0.1-py3-none-any.whl (13.9 kB view details)

Uploaded Python 3

File details

Details for the file asyncio-glib-0.1.tar.gz.

File metadata

  • Download URL: asyncio-glib-0.1.tar.gz
  • Upload date:
  • Size: 13.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.3

File hashes

Hashes for asyncio-glib-0.1.tar.gz
Algorithm Hash digest
SHA256 fe3ceb2ba5f541330c07ca1bd7ae792468d625bad1acf5354a3a7a0b9fd87521
MD5 60153055e76ceaacdfbaeafb03d61dd9
BLAKE2b-256 241c83477e079cfcfb9cedbfbc905d72fee79604b35eec2a1b749eb9f0181733

See more details on using hashes here.

File details

Details for the file asyncio_glib-0.1-py3-none-any.whl.

File metadata

  • Download URL: asyncio_glib-0.1-py3-none-any.whl
  • Upload date:
  • Size: 13.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.3

File hashes

Hashes for asyncio_glib-0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cae91a7b5f694927b04b452892c4ad2ec5296ab0d2462587a7d317bdf45ee9b7
MD5 d40ab1dd931e554af06a032c3c6ef467
BLAKE2b-256 90ca60ae11d48c276a5109953b056e78586aecfc7f1fa943ca5f934242bb649f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page