Skip to content

Commit d4fbcdb

Browse files
committed
try to cleanup a lot of leftover contexts
1 parent f86d0af commit d4fbcdb

File tree

1 file changed

+23
-5
lines changed

1 file changed

+23
-5
lines changed

tests/test_multikernelmanager.py

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)