Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/takluyver/jupyter_kernel_mgmt
Experimental new kernel management framework for Jupyter
https://github.com/takluyver/jupyter_kernel_mgmt
Last synced: about 2 months ago
JSON representation
Experimental new kernel management framework for Jupyter
- Host: GitHub
- URL: https://github.com/takluyver/jupyter_kernel_mgmt
- Owner: takluyver
- License: other
- Created: 2018-04-01T20:06:08.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2020-08-27T01:11:14.000Z (over 4 years ago)
- Last Synced: 2024-10-11T19:19:17.402Z (3 months ago)
- Language: Python
- Homepage: https://jupyter-kernel-mgmt.readthedocs.io/en/latest/
- Size: 1.5 MB
- Stars: 15
- Watchers: 9
- Forks: 8
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: COPYING.md
Awesome Lists containing this project
- awesome-jupyter-resources - GitHub - 44% open · ⏱️ 29.01.2020): (Jupyter-Notebook工具)
README
# Jupyter Kernel management
This is an experimental refactoring of the machinery for launching
and using Jupyter kernels.Some notes on the components, and how they differ from their counterparts in
`jupyter_client`:### KernelClient
Communicate with a kernel over ZeroMQ sockets.
Conceptually quite similar to the KernelClient in `jupyter_client`, but the
implementation differs a bit:* Shutting down a kernel nicely has become a method on the client, since it
is primarily about sending a message and waiting for a reply.
* The main client class now uses a Tornado IOLoop, and the blocking interface
is a wrapper around this. This avoids writing mini event loops which discard
any message but the one they're looking for.
* Message (de)serialisation and sending/receiving are now part of the separate
`jupyter_protocol` package.### KernelManager
Do 'subproccess-ish' things to a kernel - knowing if it has died, interrupting
with a signal, and forceful termination.Greatly reduced in scope relative to `jupyter_client`. In particular, the
manager is no longer responsible for launching a kernel: that machinery has
been separated (see below). The plan is to have parallel async managers, but I
haven't really worked this out yet.The main manager to work with a subprocess is in `jupyter_kernel_mgmt.subproc.manager`.
I have an implementation using the Docker API in my separate `jupyter_docker_kernels` package.
ManagerClient also implements the manager interface (see below).### KernelNanny and ManagerClient
`KernelNanny` will expose the functionality of a manager using more ZMQ
sockets, which I have called `nanny_control` and `nanny_events`.`ManagerClient` wraps the network communications back into the KernelManager
Python interface, so a client can use it as the manager for a remote kernel.
It probably needs a better name.### Discovering and launching kernels
A *kernel type* may be, for instance, Python in a specific conda environment.
Each kernel type has an ID, e.g. `spec/python3` or `ssh/mydesktop`.The plan is that third parties can implement different ways of finding
kernel types. They expose a *kernel provider*, which would know about e.g.
conda environments in general and how to find them.Kernel providers written so far:
- Finding kernel specs (in this repository)
- Finding `ipykernel` in the Python we're running on (in this repository)
- Explicitly listed kernels available over SSH (https://github.com/takluyver/jupyter_ssh_kernels/)
- Explicitly listed kernels in Docker containers (https://github.com/takluyver/jupyter_docker_kernels/)The common interface to providers is `jupyter_kernel_mgmt.discovery.KernelFinder`.
To launch a kernel, you pass its type ID to the launch method:
```python
from jupyter_kernel_mgmt.discovery import KernelFinder
kf = KernelFinder.from_entrypoints()
connection_info, manager = kf.launch('spec/python3')
```This returns the connection info dict (to be used by a client) and an optional
manager object. If `manager` is None, the connection info should include
sockets for a kernel nanny, so `ManagerClient` can be used. For now, it's
possible to have neither.### Automatically restarting kernels
TODO, see issue #1.