Browse Source

[MNT] modify conda checker to return invalid when install learnware conda failed!

tags/v0.3.2
bxdd 2 years ago
parent
commit
ccad9075cc
3 changed files with 19 additions and 14 deletions
  1. +11
    -6
      learnware/client/container.py
  2. +1
    -1
      learnware/client/utils.py
  3. +7
    -7
      learnware/market/classes.py

+ 11
- 6
learnware/client/container.py View File

@@ -520,6 +520,7 @@ class LearnwaresContainer:
assert self.mode in {"conda", "docker"}, f"mode must be in ['conda', 'docker'], should not be {self.mode}"
self.learnware_list = learnwares
self.cleanup = cleanup
self.ignore_error = ignore_error

def __enter__(self):
if self.mode == "conda":
@@ -549,7 +550,7 @@ class LearnwaresContainer:

model_list = [_learnware.get_model() for _learnware in self.learnware_containers]
with ThreadPoolExecutor(max_workers=max(os.cpu_count() // 2, 1)) as executor:
results = executor.map(self._initialize_model_container, model_list)
results = executor.map(self._initialize_model_container, model_list, [self.ignore_error]*len(model_list))
self.results = list(results)

if sum(self.results) < len(self.learnware_list):
@@ -568,7 +569,7 @@ class LearnwaresContainer:

model_list = [_learnware.get_model() for _learnware in self.learnware_containers]
with ThreadPoolExecutor(max_workers=max(os.cpu_count() // 2, 1)) as executor:
executor.map(self._destroy_model_container, model_list)
executor.map(self._destroy_model_container, model_list, [self.ignore_error]*len(model_list))

self.learnware_containers = None
self.results = None
@@ -577,20 +578,24 @@ class LearnwaresContainer:
ModelDockerContainer._destroy_docker_container(self._docker_container)

@staticmethod
def _initialize_model_container(model: ModelCondaContainer):
def _initialize_model_container(model: ModelCondaContainer, ignore_error=True):
try:
model.init_and_setup_env()
except Exception as err:
logger.error(f"build env {model.conda_env} failed due to {err}")
if not ignore_error:
raise err
logger.warning(f"build env {model.conda_env} failed due to {err}")
return False
return True

@staticmethod
def _destroy_model_container(model: ModelCondaContainer):
def _destroy_model_container(model: ModelCondaContainer, ignore_error=True):
try:
model.remove_env()
except Exception as err:
logger.error(f"remove env {model.conda_env} failed due to {err}")
if not ignore_error:
raise err
logger.warning(f"remove env {model.conda_env} failed due to {err}")
return False
return True



+ 1
- 1
learnware/client/utils.py View File

@@ -14,7 +14,7 @@ def system_execute(args, timeout=None):
try:
com_process.check_returncode()
except subprocess.CalledProcessError as err:
logger.error(f"System Execute Error: {com_process.stderr.decode()}")
logger.warning(f"System Execute Error: {com_process.stderr.decode()}")
raise err




+ 7
- 7
learnware/market/classes.py View File

@@ -12,11 +12,11 @@ class CondaChecker(BaseChecker):
super(CondaChecker, self).__init__(**kwargs)

def __call__(self, learnware: Learnware) -> int:
with LearnwaresContainer(learnware) as env_container:
if not all(env_container.get_learnware_flags()):
logger.warning(f"Conda Checker failed due to installed learnware failed")
return BaseChecker.INVALID_LEARNWARE
learnwares = env_container.get_learnwares_with_container()
check_status = self.inner_checker(learnwares[0])
try:
with LearnwaresContainer(learnware, ignore_error=False) as env_container:
learnwares = env_container.get_learnwares_with_container()
check_status = self.inner_checker(learnwares[0])
except Exception as e:
logger.warning(f"Conda Checker failed due to installed learnware failed and {e}")
return BaseChecker.INVALID_LEARNWARE
return check_status

Loading…
Cancel
Save