Skip to content

Commit 070a77a

Browse files
committed
-
1 parent d52846c commit 070a77a

File tree

2 files changed

+14
-11
lines changed

2 files changed

+14
-11
lines changed

ipykernel/kernelbase.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,6 @@ async def shell_main(self, subshell_id: str | None):
430430

431431
async def process_shell(self, socket=None):
432432
# socket=None is valid if kernel subshells are not supported.
433-
_socket = t.cast(zmq_anyio.Socket, self.shell_socket if socket is None else socket)
434433
try:
435434
while True:
436435
await self.process_shell_message(socket=socket)
@@ -567,7 +566,7 @@ async def start(self, *, task_status: TaskStatus = TASK_STATUS_IGNORED) -> None:
567566
manager = self.shell_channel_thread.manager
568567
self.shell_channel_thread.start_soon(self.shell_channel_thread_main)
569568
self.shell_channel_thread.start_soon(
570-
partial(manager.listen_from_control, self.shell_main)
569+
partial(manager.listen_from_control, self.shell_main, self.shell_channel_thread)
571570
)
572571
self.shell_channel_thread.start_soon(manager.listen_from_subshells)
573572
self.shell_channel_thread.start()

ipykernel/subshell_manager.py

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,11 @@ async def get_control_other_socket(self, thread: BaseThread) -> zmq_anyio.Socket
118118
await thread.task_group.start(self._control_other_socket.start)
119119
return self._control_other_socket
120120

121+
async def get_control_shell_channel_socket(self, thread: BaseThread) -> zmq_anyio.Socket:
122+
if not self._control_shell_channel_socket.started.is_set():
123+
await thread.task_group.start(self._control_shell_channel_socket.start)
124+
return self._control_shell_channel_socket
125+
121126
def get_other_socket(self, subshell_id: str | None) -> zmq_anyio.Socket:
122127
"""Return the other inproc pair socket for a subshell.
123128
@@ -148,18 +153,17 @@ def list_subshell(self) -> list[str]:
148153
with self._lock_cache:
149154
return list(self._cache)
150155

151-
async def listen_from_control(self, subshell_task: t.Any) -> None:
156+
async def listen_from_control(self, subshell_task: t.Any, thread: BaseThread) -> None:
152157
"""Listen for messages on the control inproc socket, handle those messages and
153158
return replies on the same socket. Runs in the shell channel thread.
154159
"""
155160
assert current_thread().name == SHELL_CHANNEL_THREAD_NAME
156161

157-
socket = self._control_shell_channel_socket
158-
async with socket:
159-
while True:
160-
request = await socket.arecv_json().wait()
161-
reply = await self._process_control_request(request, subshell_task)
162-
await socket.asend_json(reply).wait()
162+
socket = await self.get_control_shell_channel_socket(thread)
163+
while True:
164+
request = await socket.arecv_json().wait()
165+
reply = await self._process_control_request(request, subshell_task)
166+
await socket.asend_json(reply).wait()
163167

164168
async def listen_from_subshells(self) -> None:
165169
"""Listen for reply messages on inproc sockets of all subshells and resend
@@ -265,8 +269,8 @@ async def _listen_for_subshell_reply(
265269

266270
shell_channel_socket = self._get_shell_channel_socket(subshell_id)
267271

268-
task_group.start_soon(shell_channel_socket.start)
269-
await shell_channel_socket.started.wait()
272+
if not shell_channel_socket.started.is_set():
273+
await task_group.start(shell_channel_socket.start)
270274
try:
271275
while True:
272276
msg = await shell_channel_socket.arecv_multipart(copy=False).wait()

0 commit comments

Comments
 (0)