Source code for smif.controller.execute_run
"""Execute a model run - discover and schedule all steps in order
"""
import logging
import sys
from smif.controller.build import build_model_run, get_model_run_definition
from smif.controller.job import SerialJobScheduler
from smif.exception import SmifModelRunError
[docs]def execute_model_run(model_run_ids, store, warm=False, dry=False):
"""Runs the model run
Parameters
----------
modelrun_ids: list
Modelrun ids that should be executed sequentially
"""
model_run_definitions = []
for model_run in model_run_ids:
logging.info("Getting model run definition for '%s'", model_run)
model_run_definitions.append(get_model_run_definition(store, model_run))
logging.debug("Initialising the job scheduler")
job_scheduler = SerialJobScheduler(store=store)
for model_run_config in model_run_definitions:
logging.info("Build model run from configuration data")
modelrun = build_model_run(model_run_config)
logging.info("Running model run %s", modelrun.name)
if dry:
print("Dry run, stepping through model run without execution:")
print(" smif decide {}".format(modelrun.name))
try:
if warm:
modelrun.run(
store,
job_scheduler,
store.prepare_warm_start(modelrun.name),
dry_run=dry,
)
else:
modelrun.run(store, job_scheduler, dry_run=dry)
except SmifModelRunError as ex:
logging.exception(ex)
sys.exit(1)
if not dry:
print("Model run '%s' complete" % modelrun.name)
sys.stdout.flush()