Source code for ewoksid13.tasks.slurm

import logging

from ewokscore import Task
from ewokstools.submit import save_and_execute_remote

logger = logging.getLogger(__name__)


[docs] class SlurmTask( Task, optional_input_names=[ "slurm_user", "slurm_url", "slurm_token", "slurm_job_parameters", "slurm_celery_queue", "worker_module", "submit_to_slurm", "wait_to_finish", "destination_file", ], output_names=["job_id"], ): """ A base class for tasks that can be executed on a SLURM cluster. It provides methods to handle SLURM job submission and execution. """
[docs] def execute_remote(self, **kwargs): # The job will be submitted: # - To SLURM directly using ewokstools-Pyslurmutils, this is to be used by esrfusers (offline execution). # (slurm_client=True, slurm_celery_queue=None) # - To a Celery slurm queue, for example, plugged to a Beacon server (executed by opid during the experiment) # (slurm_client=False, slurm_celery_queue=lid13gpu3_slurm (for example)) submitted = save_and_execute_remote( workflow=kwargs.get("workflow"), inputs=kwargs.get("inputs"), destination_filename=self.get_input_value("destination_file", None), queue=self.get_input_value("slurm_celery_queue", None), slurm_user=self.get_input_value("slurm_user", None), slurm_url=self.get_input_value("slurm_url", None), slurm_token=self.get_input_value("slurm_token", None), worker_module=self.get_input_value("worker_module", None), slurm_job_parameters=self.get_input_value("slurm_job_parameters", {}), wait_to_finish=self.get_input_value("wait_to_finish", False), python_package="ewoksid13", ) self.outputs.job_id = submitted.job_id