diff --git a/dotflow/core/action.py b/dotflow/core/action.py index a75227dd..62710a3a 100644 --- a/dotflow/core/action.py +++ b/dotflow/core/action.py @@ -144,7 +144,8 @@ def _run_action(self, *args, task=None, **kwargs): for attempt in range(1, self.retry + 1): try: if self.timeout: - with ThreadPoolExecutor(max_workers=1) as executor: + executor = ThreadPoolExecutor(max_workers=1) + try: future = executor.submit( self._call_func, is_async, @@ -152,11 +153,23 @@ def _run_action(self, *args, task=None, **kwargs): **kwargs, ) result = future.result(timeout=self.timeout) + except TimeoutError: + future.cancel() + executor.shutdown(wait=False, cancel_futures=True) + raise + except Exception: + executor.shutdown(wait=False) + raise + else: + executor.shutdown(wait=False) else: result = self._call_func(is_async, *args, **kwargs) return result + except TimeoutError: + raise + except Exception as error: last_exception = error