Skip to content

Commit 2c061a4

Browse files
authored
Merge pull request #3665 from mpacer/reply_timeout
add kernel_info_timeout traitlet for slow kernel start/restart
2 parents 459b92c + c6dd032 commit 2c061a4

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

notebook/services/kernels/handlers.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ class ZMQChannelsHandler(AuthenticatedZMQStreamHandler):
104104

105105
@property
106106
def kernel_info_timeout(self):
107-
return self.settings.get('kernel_info_timeout', 10)
107+
km_default = self.kernel_manager.kernel_info_timeout
108+
return self.settings.get('kernel_info_timeout', km_default)
108109

109110
@property
110111
def iopub_msg_rate_limit(self):

notebook/services/kernels/kernelmanager.py

+14-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from jupyter_client.session import Session
2020
from jupyter_client.multikernelmanager import MultiKernelManager
2121
from traitlets import (Any, Bool, Dict, List, Unicode, TraitError, Integer,
22-
Instance, default, validate
22+
Float, Instance, default, validate
2323
)
2424

2525
from notebook.utils import to_os_path, exists
@@ -93,6 +93,18 @@ def _update_root_dir(self, proposal):
9393
no frontends are connected.
9494
"""
9595
)
96+
97+
kernel_info_timeout = Float(60, config=True,
98+
help="""Timeout for giving up on a kernel (in seconds).
99+
100+
On starting and restarting kernels, we check whether the
101+
kernel is running and responsive by sending kernel_info_requests.
102+
This sets the timeout in seconds for how long the kernel can take
103+
before being presumed dead.
104+
This affects the MappingKernelManager (which handles kernel restarts)
105+
and the ZMQChannelsHandler (which handles the startup).
106+
"""
107+
)
96108

97109
_kernel_buffers = Any()
98110
@default('_kernel_buffers')
@@ -305,7 +317,7 @@ def on_restart_failed():
305317
kernel.session.send(channel, "kernel_info_request")
306318
channel.on_recv(on_reply)
307319
loop = IOLoop.current()
308-
timeout = loop.add_timeout(loop.time() + 30, on_timeout)
320+
timeout = loop.add_timeout(loop.time() + self.kernel_info_timeout, on_timeout)
309321
return future
310322

311323
def notify_connect(self, kernel_id):
@@ -434,4 +446,3 @@ def cull_kernel_if_idle(self, kernel_id):
434446
self.log.warning("Culling '%s' kernel '%s' (%s) with %d connections due to %s seconds of inactivity.",
435447
kernel.execution_state, kernel.kernel_name, kernel_id, connections, idle_duration)
436448
self.shutdown_kernel(kernel_id)
437-

0 commit comments

Comments
 (0)