From 92bd3da676a06dbed4e83acb844f22e90b31f415 Mon Sep 17 00:00:00 2001 From: jackie-pc Date: Thu, 14 Dec 2023 14:41:45 -0800 Subject: [PATCH] capture exceptions thrown by any process in run_concurrently_context (#2296) --- reflex/utils/processes.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/reflex/utils/processes.py b/reflex/utils/processes.py index 794840015..19a2d6804 100644 --- a/reflex/utils/processes.py +++ b/reflex/utils/processes.py @@ -171,7 +171,9 @@ def run_concurrently_context( fns = [fn if isinstance(fn, tuple) else (fn,) for fn in fns] # type: ignore # Run the functions concurrently. - with futures.ThreadPoolExecutor(max_workers=len(fns)) as executor: + executor = None + try: + executor = futures.ThreadPoolExecutor(max_workers=len(fns)) # Submit the tasks. tasks = [executor.submit(*fn) for fn in fns] # type: ignore @@ -180,7 +182,12 @@ def run_concurrently_context( # Get the results in the order completed to check any exceptions. for task in futures.as_completed(tasks): + # if task throws something, we let it bubble up immediately task.result() + finally: + # Shutdown the executor + if executor: + executor.shutdown(wait=False) def run_concurrently(*fns: Union[Callable, Tuple]) -> None: