From 6b425aaebe33703bd44b1b15571e4af8533b851a Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Sun, 17 Jul 2022 15:36:52 -0700 Subject: [PATCH] Add shim for cancel_futures in older Pythons Thanks @hfwittmann Closes #993 Co-authored-by: H. Felix Wittmann --- src/ocrmypdf/builtin_plugins/concurrency.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/ocrmypdf/builtin_plugins/concurrency.py b/src/ocrmypdf/builtin_plugins/concurrency.py index feb718f8..cf344de6 100644 --- a/src/ocrmypdf/builtin_plugins/concurrency.py +++ b/src/ocrmypdf/builtin_plugins/concurrency.py @@ -104,6 +104,15 @@ def thread_init(q: Queue, user_init: UserInit, loglevel) -> None: class StandardExecutor(Executor): """Standard OCRmyPDF concurrent task executor.""" + def _cancel_futures_kwargs(self): + """Shim older Pythons that do not have Executor.shutdown(...cancel_futures=). + + Remove this code when support for Python 3.8 is dropped. + """ + if sys.version_info[:2] < (3, 9): + return {} + return dict(cancel_futures=True) + def _execute( self, *, @@ -142,7 +151,7 @@ class StandardExecutor(Executor): task_finished(result, pbar) except KeyboardInterrupt: # Terminate pool so we exit instantly - executor.shutdown(wait=False, cancel_futures=True) + executor.shutdown(wait=False, **self._cancel_futures_kwargs()) raise except Exception: if not os.environ.get("PYTEST_CURRENT_TEST", ""): @@ -151,7 +160,7 @@ class StandardExecutor(Executor): # results will be discard. But if the condition above is True, # then we are running in pytest, and we want everything to exit # as cleanly as possible so that we get good error messages. - executor.shutdown(wait=False, cancel_futures=True) + executor.shutdown(wait=False, **self._cancel_futures_kwargs()) raise finally: # Terminate log listener