Skip to content

Commit 7d3cdce

Browse files
committed
Rework logic of wait_for_ready
1 parent 996b53e commit 7d3cdce

File tree

4 files changed

+20
-14
lines changed

4 files changed

+20
-14
lines changed

jupyter_client/asynchronous/client.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,14 +126,21 @@ async def wait_for_ready(self, timeout=None):
126126

127127
# Wait for kernel info reply on shell channel
128128
while True:
129+
self.kernel_info()
129130
try:
130131
msg = await self.shell_channel.get_msg(timeout=1)
131132
except Empty:
132133
pass
133134
else:
134135
if msg['msg_type'] == 'kernel_info_reply':
135-
self._handle_kernel_info_reply(msg)
136-
break
136+
# Checking that IOPub is connected. If it is not connected, start over.
137+
try:
138+
await self.iopub_channel.get_msg(timeout=0.2)
139+
except Empty:
140+
pass
141+
else:
142+
self._handle_kernel_info_reply(msg)
143+
break
137144

138145
if not await self.is_alive():
139146
raise RuntimeError('Kernel died before replying to kernel_info')

jupyter_client/blocking/client.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,21 @@ def wait_for_ready(self, timeout=None):
9191

9292
# Wait for kernel info reply on shell channel
9393
while True:
94+
self.kernel_info()
9495
try:
9596
msg = self.shell_channel.get_msg(block=True, timeout=1)
9697
except Empty:
9798
pass
9899
else:
99100
if msg['msg_type'] == 'kernel_info_reply':
100-
self._handle_kernel_info_reply(msg)
101-
break
101+
# Checking that IOPub is connected. If it is not connected, start over.
102+
try:
103+
self.iopub_channel.get_msg(block=True, timeout=0.2)
104+
except Empty:
105+
pass
106+
else:
107+
self._handle_kernel_info_reply(msg)
108+
break
102109

103110
if not self.is_alive():
104111
raise RuntimeError('Kernel died before replying to kernel_info')

jupyter_client/client.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,10 @@ def start_channels(self, shell=True, iopub=True, stdin=True, hb=True, control=Tr
102102
:meth:`start_kernel`. If the channels have been stopped and you
103103
call this, :class:`RuntimeError` will be raised.
104104
"""
105-
if shell:
106-
self.shell_channel.start()
107-
self.kernel_info()
108105
if iopub:
109106
self.iopub_channel.start()
107+
if shell:
108+
self.shell_channel.start()
110109
if stdin:
111110
self.stdin_channel.start()
112111
self.allow_stdin = True

jupyter_client/tests/signalkernel.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,6 @@ def do_execute(self, code, silent, store_history=True, user_expressions=None,
5454
reply['traceback'] = ['no such command: %s' % code]
5555
return reply
5656

57-
def kernel_info_request(self, *args, **kwargs):
58-
"""Add delay to kernel_info_request
59-
60-
triggers slow-response code in KernelClient.wait_for_ready
61-
"""
62-
return super().kernel_info_request(*args, **kwargs)
63-
6457

6558
class SignalTestApp(IPKernelApp):
6659
kernel_class = SignalTestKernel

0 commit comments

Comments
 (0)