class CoordinatorFactory: def __init__(self, num_processes: int, host: str, port: int, max_simultaneous_connections: int, as_remote_client: bool): """ :param num_processes: number of parallel executions to be conducted :param host: host name of main node that holds the test queue, result queue, etc :param port: port of main node to connect to :param max_simultaneous_connections: maximum allowed connections at one time to main node; throttled to prevent overloading *multiprocsesing* module and deadlock """ self._host = host self._port = port self._num_processes = num_processes self._max_simultaneous_connections = max_simultaneous_connections self._is_local = not as_remote_client def launch(self) -> "Coordinator": if not self._is_local: self._sm = SyncManager(authkey=AUTHKEY) self._sm.start() coordinator = self._sm.CoordinatorProxy( self._num_processes, self._host, self._port, self._max_simultaneous_connections, self._is_local) else: coordinator = Coordinator(self._num_processes, self._host, self._port, self._max_simultaneous_connections, self._is_local) client = Orchestrator.Manager(addr=(self._host, self._port)) client.register_client(coordinator, self._num_processes) return coordinator