From 3a5d6e849728ab2b1b14adfd9b55131df04d8921 Mon Sep 17 00:00:00 2001 From: David Jurado Date: Fri, 26 Aug 2022 09:30:41 -0500 Subject: [PATCH] Check if Docker process is running --- mlcube/mlcube/validate.py | 16 ++++++++++++++++ mlcube/requirements.txt | 3 ++- .../mlcube_docker/mlcube_docker/docker_run.py | 5 +++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/mlcube/mlcube/validate.py b/mlcube/mlcube/validate.py index 256045c3..185b3ceb 100644 --- a/mlcube/mlcube/validate.py +++ b/mlcube/mlcube/validate.py @@ -4,6 +4,8 @@ """ import typing as t +import psutil + from mlcube.errors import (ConfigurationError, IllegalParameterTypeError, IllegalParameterValueError) from omegaconf import DictConfig @@ -102,3 +104,17 @@ def validate_type(obj, expected_type) -> None: """ if not isinstance(obj, expected_type): raise TypeError(f"Actual object type ({type(obj)}) != expected type ({expected_type}).") + + + @staticmethod + def validate_running_process(processName): + """Check if there is any running process that contains the given name processName""" + #Iterate over the all the running process + for proc in psutil.process_iter(): + try: + # Check if process name contains the given name string. + if processName.lower() in proc.name().lower(): + return True + except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): + pass + return False diff --git a/mlcube/requirements.txt b/mlcube/requirements.txt index 4c2d9b02..297d9aec 100644 --- a/mlcube/requirements.txt +++ b/mlcube/requirements.txt @@ -10,4 +10,5 @@ coloredlogs==14.0 cookiecutter==1.7.2 docker==4.3.1 PyYAML>=5.4 -omegaconf==2.1.0 \ No newline at end of file +omegaconf==2.1.0 +psutil==5.9.1 \ No newline at end of file diff --git a/runners/mlcube_docker/mlcube_docker/docker_run.py b/runners/mlcube_docker/mlcube_docker/docker_run.py index 90f1e792..b7fcd431 100644 --- a/runners/mlcube_docker/mlcube_docker/docker_run.py +++ b/runners/mlcube_docker/mlcube_docker/docker_run.py @@ -159,6 +159,11 @@ def configure(self) -> None: def run(self) -> None: """ Run a cube. """ + # Validate Runner process is available + if not Validate.validate_running_process(self.mlcube.runner.runner): + raise ProcessLookupError("Docker process is not running!") + + docker: t.Text = self.mlcube.runner.docker image: t.Text = self.mlcube.runner.image