From 9661d770cb6aa33525583854d66193c81510cfbc Mon Sep 17 00:00:00 2001 From: Athanasius <github@miggy.org> Date: Mon, 16 Aug 2021 14:20:32 +0100 Subject: [PATCH] companion: Implement, and use, asking CAPI thread to close down --- EDMarketConnector.py | 4 ++++ companion.py | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/EDMarketConnector.py b/EDMarketConnector.py index d1dee989..0e6cc95c 100755 --- a/EDMarketConnector.py +++ b/EDMarketConnector.py @@ -1577,6 +1577,10 @@ class AppWindow(object): logger.info('Unregistering hotkey manager...') hotkeymgr.unregister() + # Now the CAPI query thread + logger.info('Closing CAPI query thread...') + companion.session.capi_query_close_worker() + # Now the main programmatic input methods logger.info('Closing dashboard...') dashboard.close() diff --git a/companion.py b/companion.py index 69b6e63d..970f3e64 100644 --- a/companion.py +++ b/companion.py @@ -21,6 +21,7 @@ import webbrowser from builtins import object, range, str from email.utils import parsedate from os.path import join +from queue import Queue from typing import TYPE_CHECKING, Any, Dict, List, Mapping, Optional, OrderedDict, TypeVar, Union import requests @@ -478,6 +479,7 @@ class Session(object): self.retrying = False # Avoid infinite loop when successful auth / unsuccessful query logger.info('Starting CAPI queries thread...') + self.capi_query_queue: Queue = Queue() self.capi_query_thread = threading.Thread( target=self.capi_query_worker, daemon=True, @@ -596,11 +598,22 @@ class Session(object): def capi_query_worker(self, ): """Worker thread that performs actual CAPI queries.""" logger.info('CAPI worker thread starting') + while True: + query: Optional[str] = self.capi_query_queue.get() + if not query: + logger.info('Empty queue message, exiting...') + break + + logger.trace_if('capi.worker', f'Processing query: {query}') time.sleep(1) logger.info('CAPI worker thread DONE') + def capi_query_close_worker(self) -> None: + """Ask the CAPI query thread to finish.""" + self.capi_query_queue.put(None) + def query(self, endpoint: str) -> CAPIData: # noqa: CCR001, C901 """Perform a query against the specified CAPI endpoint.""" logger.trace_if('capi.query', f'Performing query for endpoint "{endpoint}"')