diff --git a/rclpy/rclpy/executors.py b/rclpy/rclpy/executors.py index d32700df7..6cf6cb92a 100644 --- a/rclpy/rclpy/executors.py +++ b/rclpy/rclpy/executors.py @@ -733,6 +733,7 @@ def __init__(self, num_threads: int = None, *, context: Context = None) -> None: num_threads = multiprocessing.cpu_count() except NotImplementedError: num_threads = 1 + self._futures = [] self._executor = ThreadPoolExecutor(num_threads) def _spin_once_impl( @@ -753,6 +754,11 @@ def _spin_once_impl( pass else: self._executor.submit(handler) + self._futures.append(handler) + for future in self._futures: # check for any exceptions + if future.done(): + self._futures.remove(future) + future.result() def spin_once(self, timeout_sec: float = None) -> None: self._spin_once_impl(timeout_sec)