jupyasyncclient
jupyasyncclient runs code on Jupyter kernels hosted by any server speaking the standard kernels API: rustygate, jupygate, or jupyter_server. Kernel lifecycle (create, interrupt, restart, delete) is plain HTTP; messaging is one websocket per client carrying standard Jupyter message dicts with a channel key. There is no zmq and no tornado in the client process, and every send is genuinely awaited - the zmq-side subtleties (sync-send edge consumption, slow-joiner subscriptions, socket identity contracts) all live server-side.
Three classes cover the usual shapes, mirroring jupyter_client where familiarity helps:
JupyAsyncKernelClient- one kernel: lifecycle, channels, and messaging.execute,complete,inspect,history,kernel_info,wait_for_ready, and per-channelget_*_msgaccessors work like their jupyter_client namesakes; any request can await its reply directly withreply=True; and every*_requestmessage type in the protocol is callable by name, subshell requests included, so new protocol messages need no client release.JupyAsyncKernelManager- start/stop one kernel and mint clients for it.JupyAsyncMultiKernelManager- a fleet, with keyed reuse:ensure_kernel('some-key')returns the live kernel registered under that key or starts a fresh one.
The core notebook builds the client bottom-up with every method demonstrated against a live server; the managers are thin HTTP wrappers and live in plain modules.
Two sibling pages cover the rest of a gateway’s surface: term attaches JupyAsyncTerminalClient to gateway-hosted terminals, and files builds JupyAsyncFilesClient and JupyAsyncCellsClient over the files and cells APIs, including apply_ops for keeping a local view current from a kernel’s change broadcasts.
Install
pip install jupyasyncclient
Plus a server to talk to. The examples here use rustygate serving ipymini kernels; a stock jupyter_server works identically (the test suite runs against one).
Use
import asyncio
from rustygate.tools import start_gateway
g = start_gateway()
g
True
start_new_server_kernel gives a running kernel and a ready client in one call:
km, kc = await start_new_server_kernel(g.url)
rep = await kc.execute("print('hello'); 6*7", reply=True, timeout=30)
rep['content']['status']
'ok'
Outputs arrive on the iopub queue, like jupyter_client:
m = await kc.get_iopub_msg(timeout=15)
while m['msg_type'] != 'stream': m = await kc.get_iopub_msg(timeout=15)
m['content']['text']
'hello\n'
input() in the kernel becomes an input_request on the stdin queue; answer it with input, which parents the reply properly:
fut = asyncio.ensure_future(kc.execute("name = input('who? ')", reply=True, timeout=30))
prompt = await kc.get_stdin_msg(timeout=15)
kc.input('Jeremy')
(await fut)['content']['status']
'ok'
Any protocol request type works by name, reply=True awaiting its reply - here JEP 91 subshells, no client support required beyond the message type:
sub = (await kc.create_subshell(reply=True, timeout=15))['content']['subshell_id']
rep = await kc.execute('40+2', reply=True, timeout=30, subshell_id=sub)
await kc.delete_subshell(sub, reply=True, timeout=15)
rep['content']['status']
'ok'
The multimanager runs fleets, with keyed reuse for “the kernel for X” patterns:
mkm = JupyAsyncMultiKernelManager(g.url)
k1 = await mkm.ensure_kernel('analysis')
k2 = await mkm.ensure_kernel('analysis')
k1 == k2
True
await kc.aclose()
await km.aclose()
await mkm.shutdown_all()
await mkm.aclose()
Auth is a bearer token when the server requires one: pass token=... to any of the three classes and it is sent as an Authorization header on HTTP and a query param on the websocket.
Release files for jupyasyncclient 0.2.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jupyasyncclient-0.2.7.tar.gz | 22.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jupyasyncclient-0.2.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 42.8 kB
Release files / jupyasyncclient-0.2.7.tar.gz
| Download URL | jupyasyncclient-0.2.7.tar.gz |
|---|---|
| Size | 22.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
130eefac57f46169480b3668a9f21482082827f00bf06efcbc60175bf4e88ea2
|
|
BLAKE2b-256 checksum How to use checksums |
99c24ca2ec4f75f5bb7efa90f1a021271a408de5a7d8bcfb385913719b02bfc3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.2
|
Release files / jupyasyncclient-0.2.7-py3-none-any.whl
| Download URL | jupyasyncclient-0.2.7-py3-none-any.whl |
|---|---|
| Size | 20.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d9f169610a99db7265cdda1f03afe14da3cbb642256c69df007dd7ef47e9c10e
|
|
BLAKE2b-256 checksum How to use checksums |
9fe490777f91dbd0cde5603eef4b90e2acb2ab436fb35fab94ce6533d055382a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.2
|