@@ -108,6 +108,15 @@ async def post(self, kernel_id, action):
108
108
self .finish ()
109
109
110
110
111
+ def _ensure_future (f ):
112
+ """Wrap a concurrent future as an asyncio future if there is a running loop."""
113
+ try :
114
+ asyncio .get_running_loop ()
115
+ return asyncio .wrap_future (f )
116
+ except RuntimeError :
117
+ return f
118
+
119
+
111
120
class ZMQChannelsHandler (AuthenticatedZMQStreamHandler ):
112
121
"""There is one ZMQChannelsHandler per running kernel and it oversees all
113
122
the sessions.
@@ -186,7 +195,7 @@ def nudge(self):
186
195
self .log .debug ("Nudge: not nudging busy kernel %s" , self .kernel_id )
187
196
f : Future = Future ()
188
197
f .set_result (None )
189
- return f
198
+ return _ensure_future ( f )
190
199
# Use a transient shell channel to prevent leaking
191
200
# shell responses to the front-end.
192
201
shell_channel = kernel .connect_shell ()
@@ -287,7 +296,7 @@ def nudge(count):
287
296
future = gen .with_timeout (loop .time () + self .kernel_info_timeout , both_done )
288
297
# ensure we have no dangling resources or unresolved Futures in case of timeout
289
298
future .add_done_callback (finish )
290
- return future
299
+ return _ensure_future ( future )
291
300
292
301
def request_kernel_info (self ):
293
302
"""send a request for kernel_info"""
@@ -311,7 +320,7 @@ def request_kernel_info(self):
311
320
if not future .done ():
312
321
self .log .debug ("Waiting for pending kernel_info request" )
313
322
future .add_done_callback (lambda f : self ._finish_kernel_info (f .result ()))
314
- return self ._kernel_info_future
323
+ return _ensure_future ( self ._kernel_info_future )
315
324
316
325
def _handle_kernel_info_reply (self , msg ):
317
326
"""process the kernel_info_reply
@@ -704,7 +713,7 @@ def _limit_rate(self, channel, msg, msg_list):
704
713
705
714
def close (self ):
706
715
super ().close ()
707
- return self ._close_future
716
+ return _ensure_future ( self ._close_future )
708
717
709
718
def on_close (self ):
710
719
self .log .debug ("Websocket closed %s" , self .session_key )
0 commit comments