jupyasyncclient
jupyasyncclient runs code on Jupyter kernels hosted by any server speaking the standard kernels API: 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.
Install
pip install jupyasyncclient
Plus a server to talk to. The examples here use jupygate serving ipymini kernels; a stock jupyter_server works identically (the test suite runs against one).
Use
import asyncio, time
from jupygate.core import create_app, serve
server = serve(create_app(), port=8812, in_thread=True)
while not getattr(server, 'started', False): time.sleep(0.05)
server.started
True
start_new_server_kernel gives a running kernel and a ready client in one call:
km, kc = await start_new_server_kernel('http://127.0.0.1:8812')
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('http://127.0.0.1:8812')
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.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jupyasyncclient-0.2.0.tar.gz.
File metadata
- Download URL: jupyasyncclient-0.2.0.tar.gz
- Upload date:
- Size: 15.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b62eac2ded6e1b7e311a482a8ee327deb97b5e205c41eec6dfa5ae5172e03b7e
|
|
| MD5 |
06e7d7a9e22c16ba0057a4551f8c7c63
|
|
| BLAKE2b-256 |
10e74c28104aa28aa2285108fe375345de434284602704269e88d84628be3556
|
File details
Details for the file jupyasyncclient-0.2.0-py3-none-any.whl.
File metadata
- Download URL: jupyasyncclient-0.2.0-py3-none-any.whl
- Upload date:
- Size: 12.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f376205c9cc1e82e21e302c25a8f554f9a6b61cf378dfb0943d08230592d2264
|
|
| MD5 |
1b11b4fdbfeab802082c4bf2625dd750
|
|
| BLAKE2b-256 |
e1302b329be6fcc17857215d4ca4452f327d84375a7bbb842b24015003624ce3
|