simulation¶
common¶
- class ActiveModuleInfo(name: str, daemon: bool)¶
Bases:
object- daemon: bool¶
- name: str¶
- process: Process | None = None¶
- class ModelFromInstanceInfo(name: str, daemon: bool, instance: movici_simulation_core.core.types.Model)¶
Bases:
ActiveModuleInfo,ModelInfo- get_instance()¶
- class ModelFromTypeInfo(name: str, daemon: bool, cls: Type[movici_simulation_core.core.types.Model], config: dict | None = None)¶
Bases:
ActiveModuleInfo,ModelInfo- config: dict | None = None¶
- get_instance()¶
- class ModelTypeInfo(identifier: str, cls: Type[movici_simulation_core.core.types.Model])¶
Bases:
ModuleTypeInfo
- class ServiceInfo(name: str, daemon: bool, cls: Type[movici_simulation_core.core.types.Service], address: str | None = None)¶
Bases:
ActiveModuleInfo- address: str | None = None¶
- fill_service_discovery(svc_discovery: Dict[str, str])¶
- set_port(port: int)¶
- class ServiceTypeInfo(identifier: str, cls: Type[movici_simulation_core.core.types.Service], auto_use: bool, daemon: bool)¶
Bases:
ModuleTypeInfo- auto_use: bool¶
- daemon: bool¶
- class SimulationRunner(modules: dict[str, ActiveModuleInfo], settings: Settings, schema: AttributeSchema, strategies: Sequence[Type])¶
Bases:
object
distributed¶
- class DistributedSimulationRunner(modules: dict[str, ActiveModuleInfo], settings: Settings, schema: AttributeSchema, strategies: Sequence[Type])¶
Bases:
SimulationRunnerSimulationRunner that runs every model and service in its own separate process. The models and services then connect using TCP and zeroMQ
- run() int¶
starts up services from config and auto_use using ServiceRunner. Collects service addresses starts up models from config with service addresses for discovery using ModelRunner tracks models and services, terminates when necessary (question: when do we terminate everything and when does the orchestrator take over exception handling?)
- class ModelRunner(model_info: ModelInfo, settings: Settings, strategies: list[Type] | None = None, schema: AttributeSchema | None = None)¶
Bases:
ProcessRunnerProvides logic for:
- Creating a Process (daemon=False) that runs a Model. Using a wrapping function, this
subprocess will:
create the model with its model adapter
create a (dealer) socket
run the model
catch exceptions from model, send ERROR message
raise exceptions when not directly from model
Fills the ModelInfo object
By creating the process as daemon=False, models can spawn their own subprocesses
- close()¶
- entry_point()¶
- init_data_handler: ServicedInitDataClient | None = None¶
- socket: MessageDealerSocket | None = None¶
- start()¶
- update_handler: UpdateDataClient | None = None¶
- class ProcessRunner(strategies: list[Type] | None, schema: AttributeSchema | None = None)¶
Bases:
object- ctx = <multiprocessing.context.ForkContext object>¶
- prepare_subprocess()¶
- class ServiceRunner(service: ServiceInfo, settings: Settings, strategies: list[Type] | None = None, schema: AttributeSchema | None = None)¶
Bases:
ProcessRunnerProvides logic for:
Creating a Pipe that the Service can use to announce its port
- Creating a Process (daemon=True) that runs Service. Using a wrapping function this
subprocess will
create the service
create a (router) socket
announce the port
run the Service
raise exception on failure
Fills the ServiceInfo object
Raising an exception if it fails to announce the port in time
By creating the process as daemon=True, services cannot spawn their own subprocesses but they can be easily terminated
- TIMEOUT = 5¶
- entry_point(conn: Connection)¶
- start()¶
in_process¶
- class InProcessOrchestratorStream¶
Bases:
BaseStream[Tuple[str,Message]]InProcessOrchestratorStream is a small implementation of BaseStream so that the orchestrator can run in in-process mode. Different from a regular Stream, it is not the means to a long running process, ie. its run() method returns quickly
- class InProcessSimulationRunner(modules: dict[str, ActiveModuleInfo], settings: Settings, schema: AttributeSchema, strategies: Sequence[Type])¶
Bases:
SimulationRunnerA SimulationRunner that connects all models and services in a single process, as opposed to the DistributedSimulationRunner that sets up models and services that run in a separate process each and have them connect through TCP
- handle_model_command(model: ModelConnector, command: Message)¶
- run() int¶
- class InProcessUpdateDataClient¶
Bases:
UpdateDataClientBase[dict]- clear()¶
- close()¶
- counter: Iterator[str]¶
- get(address: str, key: str, mask: dict | None) dict¶
- put(data: dict) Tuple[str, str]¶
- reset_counter()¶
- class NoopSerializer(*args, **kwargs)¶
Bases:
InternalSerializationStrategy[dict]- dumps(data: dict) dict¶
- loads(raw_data: dict) dict¶