Skip to main content

A concurrent python kernel for Jupyter supporting AnyIO, AsyncIO and Trio.

Project description

async-kernel

pypi downloads CI Ruff uv basedpyright - checked Built with Material for MkDocs codecov

logo-svg

async-kernel is a Python kernel for Jupyter that provides concurrent message handling via an asynchronous backend (asyncio or trio).

The kernel provides two external interfaces:

  1. Direct ZMQ socket messaging via a configuration file and kernel spec - (Jupyter, VScode, etc).
  2. An experimental callback style interface (Jupyterlite).

Highlights

[^1]: A gui (host) enabled kernel runs a gui event loop with the asynchronous backend running as guest. The host must be set before the kernel is started. This was a deliberate design choice to to ensure good performance and reliability.

[^2]: The asyncio implementation of start_guest_run was written by the author of aiologic and provided as a gist.

[^3]: trio's start_guest_run.

Avoid deadlocks

The standard (synchronous) kernel implementation processes messages sequentially irrespective of the message type. The problem being that long running execute requests make the kernel non-responsive.

Another problem exists when an asynchronous execute request awaits a result that is delivered via a kernel message - this will cause a deadlock because the message will be stuck in the queue behind the blocking execute request[^5].

async-kernel handles messages according to the channel, message type and subshell id. So widget com message will get processed in a separate queue to an execute request. Further detail is given in the concurrency notebook, a Jupyterlite version is available here.

Example

Try the following using a standard kernel and then try it with async-kernel.

# Make the shell thread busy
import time

time.sleep(1e6)

Try the following in another cell:

  • code completion (tab)
  • docstring (shift tab)

[^5]: IPyKernel solves this issue specifically for widgets by using the concept of 'widget coms over subshells'. Widget messages arrive in a different thread which on occasion can cause unexpected behaviour, especially when using asynchronous libraries.

Installation

pip install async-kernel

Kernel specs

A kernel spec with the name 'async' is added when async-kernel is installed.

Kernel specs can be added/removed via the command line.

Backends

The backend set on the interface is the asynchronous library the kernel uses for message handling. It is also the asynchronous library directly available when executing code in cells or via a console[^3].

[^3]: Irrespective of the configured backend, functions/coroutines can be executed using a specific backend with the method call_using_backend.

Example - overwrite the 'async' kernel spec to use a trio backend

pip install trio
async-kernel -a async --interface.backend=trio

Gui event loop

The kernel can be started with a gui event loop as the host and the backend running as a guest.

asyncio backend

# tk
async-kernel -a async-tk --interface.loop=tk

# qt
pip install PySide6-Essentials
async-kernel -a async-qt --interface.loop=qt

trio backend

pip install trio
# tk
async-kernel -a async-tk --interface.loop=tk --interface.backend=trio

# qt
pip install PySide6-Essentials
async-kernel -a async-qt --interface.loop=qt --interface.backend=trio

For further detail about kernel spec customisation see command line and kernel configuration.

Origin

async-kernel started as a fork of IPyKernel. Thank you to the original contributors of IPyKernel that made async-kernel possible.

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

async_kernel-0.13.2.tar.gz (308.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

async_kernel-0.13.2-py3-none-any.whl (108.4 kB view details)

Uploaded Python 3

File details

Details for the file async_kernel-0.13.2.tar.gz.

File metadata

  • Download URL: async_kernel-0.13.2.tar.gz
  • Upload date:
  • Size: 308.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for async_kernel-0.13.2.tar.gz
Algorithm Hash digest
SHA256 4450f8b72bcfa4cfdb5dba240c3980ad295fa4524ce4fe48685b12bb21b6d839
MD5 9325944b14794d377ba3be4f05c50530
BLAKE2b-256 75ff25dc7a6e9137340b55abf5dab5a3d706153fb27fc6058ff63ff3ff565f4f

See more details on using hashes here.

Provenance

The following attestation bundles were made for async_kernel-0.13.2.tar.gz:

Publisher: publish-to-pypi.yml on fleming79/async-kernel

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file async_kernel-0.13.2-py3-none-any.whl.

File metadata

  • Download URL: async_kernel-0.13.2-py3-none-any.whl
  • Upload date:
  • Size: 108.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for async_kernel-0.13.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0b911d0b93c18b0f45e1542ef3d6bc57fcdc388be18513ead9728d5e214e478e
MD5 556b974963b8827e238c84f40c2fd4b8
BLAKE2b-256 65f2bf59708ee26c9e7139dcd5cd23a8ae3e9cfd0d5a5a7e12c3e9834e81dbd4

See more details on using hashes here.

Provenance

The following attestation bundles were made for async_kernel-0.13.2-py3-none-any.whl:

Publisher: publish-to-pypi.yml on fleming79/async-kernel

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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