diff --git a/juju/client/connection.py b/juju/client/connection.py index ff6d8ee6b..d1c2f0eb0 100644 --- a/juju/client/connection.py +++ b/juju/client/connection.py @@ -425,9 +425,14 @@ def _exit_tasks(): for task in jasyncio.all_tasks(): task.cancel() - loop = jasyncio.get_running_loop() - for sig in (signal.SIGINT, signal.SIGTERM): - loop.add_signal_handler(sig, _exit_tasks) + try: + loop = jasyncio.get_running_loop() + for sig in (signal.SIGINT, signal.SIGTERM): + loop.add_signal_handler(sig, _exit_tasks) + except (ValueError, OSError, RuntimeError) as e: + # add_signal_handler doesn't work in a thread + if 'main thread' not in str(e): + raise return (await websockets.connect( url, @@ -474,9 +479,14 @@ async def close(self, to_reconnect=False): self.proxy.close() # Remove signal handlers - loop = jasyncio.get_running_loop() - for sig in (signal.SIGINT, signal.SIGTERM): - loop.remove_signal_handler(sig) + try: + loop = jasyncio.get_running_loop() + for sig in (signal.SIGINT, signal.SIGTERM): + loop.remove_signal_handler(sig) + except (ValueError, OSError, RuntimeError) as e: + # add_signal_handler doesn't work in a thread + if 'main thread' not in str(e): + raise async def _recv(self, request_id): if not self.is_open: