From 297eb09aab17667080e7514c6ee4332b58003ab4 Mon Sep 17 00:00:00 2001 From: Kevin Bates Date: Mon, 18 Feb 2019 16:02:08 -0800 Subject: [PATCH] Enable restart_kernel for async usage Converted `MappingKernelManager.restart_kernel` to a coroutine so that projects that take advantage of async kernel startup can also realize appropriate behavior relative to restarts. --- jupyter_server/services/kernels/kernelmanager.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/jupyter_server/services/kernels/kernelmanager.py b/jupyter_server/services/kernels/kernelmanager.py index b7f6d9f9a3..68b263909d 100644 --- a/jupyter_server/services/kernels/kernelmanager.py +++ b/jupyter_server/services/kernels/kernelmanager.py @@ -306,10 +306,11 @@ def shutdown_kernel(self, kernel_id, now=False): return super(MappingKernelManager, self).shutdown_kernel(kernel_id, now=now) + @gen.coroutine def restart_kernel(self, kernel_id): """Restart a kernel by kernel_id""" self._check_kernel_id(kernel_id) - super(MappingKernelManager, self).restart_kernel(kernel_id) + yield gen.maybe_future(super(MappingKernelManager, self).restart_kernel(kernel_id)) kernel = self.get_kernel(kernel_id) # return a Future that will resolve when the kernel has successfully restarted channel = kernel.connect_shell() @@ -345,7 +346,7 @@ def on_restart_failed(): channel.on_recv(on_reply) loop = IOLoop.current() timeout = loop.add_timeout(loop.time() + self.kernel_info_timeout, on_timeout) - return future + raise gen.Return(future) def notify_connect(self, kernel_id): """Notice a new connection to a kernel"""