diff --git a/autosubmit/platforms/platform.py b/autosubmit/platforms/platform.py index 438078118503dd8ae8a5a1e9da93675b447b217b..4b46b9e6f25776a4184c46b2906a6cbcd3324bc7 100644 --- a/autosubmit/platforms/platform.py +++ b/autosubmit/platforms/platform.py @@ -1,9 +1,7 @@ -import copy +import atexit import queue - -import time - +import setproctitle import locale import os @@ -13,14 +11,23 @@ from typing import List, Union from autosubmit.helpers.parameters import autosubmit_parameter from log.log import AutosubmitCritical, AutosubmitError, Log -from multiprocessing import Process, Queue +from multiprocessing import Process, Queue, Event +# stop the background task gracefully before exit +def stop_background(stop_event, process): + # request the background thread stop + stop_event.set() + # wait for the background thread to stop + process.join() def processed(fn): def wrapper(*args, **kwargs): + stop_event = Event() + args = (args[0], stop_event) process = Process(target=fn, args=args, kwargs=kwargs, name=f"{args[0].name}_platform") process.daemon = True # Set the process as a daemon process process.start() + atexit.register(stop_background, stop_event, process) return process return wrapper @@ -816,11 +823,12 @@ class Platform(object): raise NotImplementedError @processed - def recover_job_logs(self): + def recover_job_logs(self, event): + setproctitle.setproctitle(f"autosubmit log {self.expid} recovery {self.name.lower()}") job_names_processed = set() self.connected = False self.restore_connection(None) - while True: + while not event.is_set(): try: job,children = self.recovery_queue.get() if job.wrapper_type != "vertical": diff --git a/environment.yml b/environment.yml index 3cde1afa2ddd971f075b678998eb2e3284751ef3..56b5d33ea8262dca0dc94b22c7a42a196e77e435 100644 --- a/environment.yml +++ b/environment.yml @@ -43,4 +43,5 @@ dependencies: - requests - configobj - psutil + - setproctitle diff --git a/requeriments.txt b/requeriments.txt index 55ebc8abf0738b14e9463a5dcad2e7952ec3a4e9..80e3d68caa94bb404b3f9986c6e5493d2fecee3c 100644 --- a/requeriments.txt +++ b/requeriments.txt @@ -1,3 +1,4 @@ +setproctitle xlib==0.21 setuptools<=68.2.2 bscearth.utils<=0.5.2 diff --git a/setup.py b/setup.py index 1ff4f600682ee509db3458eba12d85b472c4df37..d4a763a162dc03f748edc3f1e18b57fb18efe243 100644 --- a/setup.py +++ b/setup.py @@ -64,7 +64,9 @@ setup( 'rocrate==0.*', 'autosubmitconfigparser==1.0.62', 'configparser', - 'pathlib' + 'pathlib', + 'setproctitle' + ], extras_require={ ':python_version <= "3.7"':