@@ -93,6 +93,7 @@ def _run_lifecycle(km, test_kid=None):
9393 km .shutdown_kernel (kid , now = True )
9494 assert kid not in km , f"{ kid } not in { km } "
9595 kc .stop_channels ()
96+ km .context .destroy (linger = 0 )
9697
9798 def _run_cinfo (self , km , transport , ip ):
9899 kid = km .start_kernel (stdout = PIPE , stderr = PIPE )
@@ -111,6 +112,7 @@ def _run_cinfo(self, km, transport, ip):
111112 stream = km .connect_hb (kid )
112113 stream .close ()
113114 km .shutdown_kernel (kid , now = True )
115+ km .context .destroy (linger = 0 )
114116
115117 # static so picklable for multiprocessing on Windows
116118 @classmethod
@@ -130,6 +132,7 @@ def test_shutdown_all(self):
130132 self .assertNotIn (kid , km )
131133 # shutdown again is okay, because we have no kernels
132134 km .shutdown_all ()
135+ km .context .destroy (linger = 0 )
133136
134137 def test_tcp_cinfo (self ):
135138 km = self ._get_tcp_km ()
@@ -160,10 +163,10 @@ def test_start_sequence_ipc_kernels(self):
160163
161164 def tcp_lifecycle_with_loop (self ):
162165 # Ensure each thread has an event loop
163- loop = asyncio . new_event_loop ()
164- asyncio . set_event_loop ( loop )
165- self . test_tcp_lifecycle ()
166- loop . close ( )
166+ async def _task ():
167+ return self . test_tcp_lifecycle ( )
168+
169+ asyncio . run ( _task () )
167170
168171 @pytest .mark .skipif (is_freethreaded , reason = "Fail on free-threaded python" )
169172 def test_start_parallel_thread_kernels (self ):
@@ -332,6 +335,8 @@ async def _run_lifecycle(km, test_kid=None):
332335 assert isinstance (k , AsyncKernelManager )
333336 await km .shutdown_kernel (kid , now = True )
334337 assert kid not in km , f"{ kid } not in { km } "
338+ await km .shutdown_all ()
339+ km .context .destroy (linger = 100 )
335340
336341 async def _run_cinfo (self , km , transport , ip ):
337342 kid = await km .start_kernel (stdout = PIPE , stderr = PIPE )
@@ -351,6 +356,7 @@ async def _run_cinfo(self, km, transport, ip):
351356 stream .close ()
352357 await km .shutdown_kernel (kid , now = True )
353358 self .assertNotIn (kid , km )
359+ km .context .destroy (linger = 0 )
354360
355361 @gen_test
356362 async def test_tcp_lifecycle (self ):
@@ -402,6 +408,7 @@ async def test_shutdown_all_while_starting(self):
402408 self .assertNotIn (kid , km )
403409 # shutdown again is okay, because we have no kernels
404410 await km .shutdown_all ()
411+ km .context .destroy (linger = 0 )
405412
406413 @gen_test
407414 async def test_use_pending_kernels (self ):
@@ -422,6 +429,7 @@ async def test_use_pending_kernels(self):
422429 k = km .get_kernel (kid )
423430 assert isinstance (k , AsyncKernelManager )
424431 await ensure_future (km .shutdown_kernel (kid , now = True ))
432+ km .context .destroy (linger = 0 )
425433 # Wait for the kernel to shutdown
426434 await kernel .ready
427435 assert kid not in km , f"{ kid } not in { km } "
@@ -439,6 +447,7 @@ async def test_use_pending_kernels_early_restart(self):
439447 # Wait for the kernel to shutdown
440448 await kernel .ready
441449 assert kid not in km , f"{ kid } not in { km } "
450+ km .context .destroy (linger = 0 )
442451
443452 @gen_test
444453 async def test_use_pending_kernels_early_shutdown (self ):
@@ -451,6 +460,7 @@ async def test_use_pending_kernels_early_shutdown(self):
451460 # Wait for the kernel to shutdown
452461 await kernel .ready
453462 assert kid not in km , f"{ kid } not in { km } "
463+ km .context .destroy (linger = 0 )
454464
455465 @gen_test
456466 async def test_use_pending_kernels_early_interrupt (self ):
@@ -466,23 +476,27 @@ async def test_use_pending_kernels_early_interrupt(self):
466476 # Wait for the kernel to shutdown
467477 await kernel .ready
468478 assert kid not in km , f"{ kid } not in { km } "
479+ km .context .destroy (linger = 0 )
469480
470481 @gen_test
471482 async def test_tcp_cinfo (self ):
472483 km = self ._get_tcp_km ()
473484 await self ._run_cinfo (km , "tcp" , localhost ())
485+ km .context .destroy (linger = 0 )
474486
475487 @skip_win32
476488 @gen_test
477489 async def test_ipc_lifecycle (self ):
478490 km = self ._get_ipc_km ()
479491 await self ._run_lifecycle (km )
492+ km .context .destroy (linger = 0 )
480493
481494 @skip_win32
482495 @gen_test
483496 async def test_ipc_cinfo (self ):
484497 km = self ._get_ipc_km ()
485498 await self ._run_cinfo (km , "ipc" , "test" )
499+ km .context .destroy (linger = 0 )
486500
487501 @gen_test
488502 async def test_start_sequence_tcp_kernels (self ):
@@ -590,6 +604,7 @@ async def test_subclass_callables(self):
590604 mkm .get_kernel (kid ).reset_counts ()
591605 mkm .reset_counts ()
592606 await mkm .shutdown_all (now = True )
607+ mkm .context .destroy (linger = 0 )
593608 assert mkm .call_count ("remove_kernel" ) == 1
594609 assert mkm .call_count ("_async_request_shutdown" ) == 0
595610 assert mkm .call_count ("_async_finish_shutdown" ) == 0
@@ -607,6 +622,7 @@ async def test_bad_kernelspec(self):
607622 )
608623 with pytest .raises (FileNotFoundError ):
609624 await ensure_future (km .start_kernel (kernel_name = "bad" , stdout = PIPE , stderr = PIPE ))
625+ km .context .destroy (linger = 0 )
610626
611627 @gen_test
612628 async def test_bad_kernelspec_pending (self ):
@@ -624,8 +640,9 @@ async def test_bad_kernelspec_pending(self):
624640 assert kernel_id in km .list_kernel_ids ()
625641 await ensure_future (km .shutdown_kernel (kernel_id ))
626642 assert kernel_id not in km .list_kernel_ids ()
643+ km .context .destroy (linger = 0 )
627644
628- @gen_test (timeout = 10 )
645+ @gen_test (timeout = 30 )
629646 async def test_stream_on_recv (self ):
630647 mkm = self ._get_tcp_km ()
631648 kid = await mkm .start_kernel (stdout = PIPE , stderr = PIPE )
@@ -656,3 +673,4 @@ def record_activity(msg_list):
656673 client .stop_channels ()
657674 stream .close ()
658675 await km .shutdown_kernel (now = True )
676+ km .context .destroy (linger = 0 )
0 commit comments