from abc import ABC, abstractmethod from concurrent.futures import Executor, ThreadPoolExecutor from pilot.component import BaseComponent, ComponentType, SystemApp class ExecutorFactory(BaseComponent, ABC): name = ComponentType.EXECUTOR_DEFAULT.value @abstractmethod def create(self) -> "Executor": """Create executor""" class DefaultExecutorFactory(ExecutorFactory): def __init__(self, system_app: SystemApp | None = None, max_workers=None): super().__init__(system_app) self._executor = ThreadPoolExecutor( max_workers=max_workers, thread_name_prefix=self.name ) def init_app(self, system_app: SystemApp): pass def create(self) -> Executor: return self._executor