Skip to content

Commit 3cabdc4

Browse files
committed
add async support for kernel shutdown
1 parent 5103959 commit 3cabdc4

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

jupyter_client/manager.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ def request_shutdown(self, restart=False):
260260
self._connect_control_socket()
261261
self.session.send(self._control_socket, msg)
262262

263+
@gen.coroutine
263264
def finish_shutdown(self, waittime=None, pollinterval=0.1):
264265
"""Wait for kernel shutdown, then kill process if it doesn't shutdown.
265266
@@ -270,7 +271,7 @@ def finish_shutdown(self, waittime=None, pollinterval=0.1):
270271
waittime = max(self.shutdown_wait_time, 0)
271272
for i in range(int(waittime/pollinterval)):
272273
if self.is_alive():
273-
time.sleep(pollinterval)
274+
yield gen.sleep(pollinterval)
274275
else:
275276
# If there's still a proc, wait and clear
276277
if self.has_kernel:
@@ -292,6 +293,7 @@ def cleanup(self, connection_file=True):
292293
self._close_control_socket()
293294
self.session.parent = None
294295

296+
@gen.coroutine
295297
def shutdown_kernel(self, now=False, restart=False):
296298
"""Attempts to stop the kernel process cleanly.
297299
@@ -320,7 +322,7 @@ def shutdown_kernel(self, now=False, restart=False):
320322
# Don't send any additional kernel kill messages immediately, to give
321323
# the kernel a chance to properly execute shutdown actions. Wait for at
322324
# most 1s, checking every 0.1s.
323-
self.finish_shutdown()
325+
yield gen.maybe_future(self.finish_shutdown())
324326

325327
self.cleanup(connection_file=not restart)
326328

jupyter_client/multikernelmanager.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ def start_kernel(self, kernel_name=None, **kwargs):
112112
self._kernels[kernel_id] = km
113113
raise gen.Return(kernel_id)
114114

115-
@kernel_method
115+
@gen.coroutine
116116
def shutdown_kernel(self, kernel_id, now=False, restart=False):
117117
"""Shutdown a kernel by its kernel uuid.
118118
@@ -125,17 +125,21 @@ def shutdown_kernel(self, kernel_id, now=False, restart=False):
125125
restart : bool
126126
Will the kernel be restarted?
127127
"""
128+
km = self.get_kernel(kernel_id)
129+
yield gen.maybe_future(km.shutdown_kernel(now, restart))
128130
self.log.info("Kernel shutdown: %s" % kernel_id)
129131
self.remove_kernel(kernel_id)
130132

131133
@kernel_method
132134
def request_shutdown(self, kernel_id, restart=False):
133135
"""Ask a kernel to shut down by its kernel uuid"""
134136

135-
@kernel_method
137+
@gen.coroutine
136138
def finish_shutdown(self, kernel_id, waittime=None, pollinterval=0.1):
137139
"""Wait for a kernel to finish shutting down, and kill it if it doesn't
138140
"""
141+
km = self.get_kernel(kernel_id)
142+
yield gen.maybe_future(km.finish_shutdown(waittime, pollinterval))
139143
self.log.info("Kernel shutdown: %s" % kernel_id)
140144

141145
@kernel_method

0 commit comments

Comments
 (0)