Pending Kernels#
Added in 7.1.0
In scenarios where an kernel takes a long time to start (e.g. kernels running
remotely), it can be advantageous to immediately return the kernel’s model and
ID from key methods like .start_kernel() and .shutdown_kernel(). The
kernel will continue its task without blocking other managerial actions.
This intermediate state is called a “pending kernel”.
How they work#
When .start_kernel() or .shutdown_kernel() is called, a Future is
created under the KernelManager.ready property. This property can be
awaited anytime to ensure that the kernel moves out of its pending state, e.g.:
# await a Kernel Manager's `.ready` property to
# block further action until the kernel is out
# of its pending state.
await kernel_manager.ready
Once the kernel is finished pending, .ready.done() will be True and
either 1) .ready.result() will return None or 2) .ready.exception()
will return a raised exception
Using pending kernels#
The most common way to interact with pending kernels is through the ``
MultiKernelManager``—the object that manages a collection of kernels—by setting
its use_pending_kernels trait to True. Pending kernels are “opt-in”;
they are not used by default in the MultiKernelManager.
When use_pending_kernels is True, the following changes are made to the
MultiKernelManager:
start_kernelandstop_kernelreturn immediately while running thepending task in a background thread.
- The following methods raise a
RuntimeErrorif a kernel is pending: restart_kernelinterrupt_kernelshutdown_kernel
- The following methods raise a
shutdown_allwill wait for all pending kernels to become ready beforeattempting to shut them down.