Skip to content

Commit 164f45d

Browse files
committed
fix test and fix loop handling
1 parent e409fd1 commit 164f45d

File tree

6 files changed

+12
-8
lines changed

6 files changed

+12
-8
lines changed

jupyter_client/channels.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ def run(self) -> None:
109109
loop = asyncio.new_event_loop()
110110
asyncio.set_event_loop(loop)
111111
loop.run_until_complete(self._async_run())
112+
loop.close()
112113

113114
async def _async_run(self) -> None:
114115
"""The thread's main activity. Call start() instead."""

jupyter_client/tests/test_kernelmanager.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,13 +194,15 @@ async def test_async_signal_kernel_subprocesses(self, name, install, expected):
194194
class TestKernelManager:
195195
def test_lifecycle(self, km):
196196
km.start_kernel(stdout=PIPE, stderr=PIPE)
197+
kc = km.client()
197198
assert km.is_alive()
198199
is_done = km.ready.done()
199200
assert is_done
200201
km.restart_kernel(now=True)
201202
assert km.is_alive()
202203
km.interrupt_kernel()
203204
assert isinstance(km, KernelManager)
205+
kc.stop_channels()
204206
km.shutdown_kernel(now=True)
205207
assert km.context.closed
206208

jupyter_client/tests/test_multikernelmanager.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,11 @@ def _run_lifecycle(km, test_kid=None):
8888
assert kid in km.list_kernel_ids()
8989
km.interrupt_kernel(kid)
9090
k = km.get_kernel(kid)
91+
kc = k.client()
9192
assert isinstance(k, KernelManager)
9293
km.shutdown_kernel(kid, now=True)
9394
assert kid not in km, f"{kid} not in {km}"
95+
kc.stop_channels()
9496

9597
def _run_cinfo(self, km, transport, ip):
9698
kid = km.start_kernel(stdout=PIPE, stderr=PIPE)
@@ -415,10 +417,6 @@ async def test_use_pending_kernels_early_shutdown(self):
415417
kernel = km.get_kernel(kid)
416418
assert not kernel.ready.done()
417419
# Try shutting down while the kernel is pending
418-
with pytest.raises(RuntimeError):
419-
await ensure_future(km.shutdown_kernel(kid, now=True))
420-
await kernel.ready
421-
# Shutdown once the kernel is ready
422420
await ensure_future(km.shutdown_kernel(kid, now=True))
423421
# Wait for the kernel to shutdown
424422
await kernel.ready
@@ -476,6 +474,7 @@ def tcp_lifecycle_with_loop(self):
476474
loop = asyncio.new_event_loop()
477475
asyncio.set_event_loop(loop)
478476
loop.run_until_complete(self.raw_tcp_lifecycle())
477+
loop.close()
479478

480479
# static so picklable for multiprocessing on Windows
481480
@classmethod
@@ -491,6 +490,7 @@ def raw_tcp_lifecycle_sync(cls, test_kid=None):
491490
loop = asyncio.new_event_loop()
492491
asyncio.set_event_loop(loop)
493492
loop.run_until_complete(cls.raw_tcp_lifecycle(test_kid=test_kid))
493+
loop.close()
494494

495495
@gen_test
496496
async def test_start_parallel_thread_kernels(self):

jupyter_client/threaded.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,9 @@ def stop(self) -> None:
243243
self.close()
244244
self.ioloop = None
245245

246+
def __del__(self):
247+
self.close()
248+
246249
def close(self) -> None:
247250
if self.ioloop is not None:
248251
try:

jupyter_client/utils.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
- vendor functions from ipython_genutils that should be retired at some point.
55
"""
66
import asyncio
7+
import atexit
78
import inspect
89
import os
910

@@ -14,6 +15,7 @@ def wrapped(*args, **kwargs):
1415
loop = asyncio.get_running_loop()
1516
except RuntimeError:
1617
loop = asyncio.new_event_loop()
18+
atexit.register(loop.close)
1719
asyncio.set_event_loop(loop)
1820
import nest_asyncio # type: ignore
1921

pyproject.toml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,6 @@ filterwarnings= [
4141
# Fail on warnings
4242
"error",
4343

44-
# Workarounds for https://github.com/pytest-dev/pytest-asyncio/issues/77
45-
"ignore:unclosed <socket.socket:ResourceWarning",
46-
"ignore:unclosed event loop:ResourceWarning",
47-
4844
# Workaround for https://github.com/tornadoweb/tornado/issues/3106
4945
# (To be fixed in Tornado 6.2)
5046
"ignore:There is no current event loop:DeprecationWarning:tornado",

0 commit comments

Comments
 (0)