Select Git revision
prepare_era5_data.py
run_environment.py 1.79 KiB
__author__ = "Lukas Leufen"
__date__ = '2019-11-25'
import logging
import os
import shutil
import time
from src.helpers import Logger
from src.datastore import DataStoreByScope as DataStoreObject
from src.datastore import NameNotFoundInDataStore
from src.helpers import TimeTracking
class RunEnvironment(object):
"""
basic run class to measure execution time. Either call this class calling it by 'with' or delete the class instance
after finishing the measurement. The duration result is logged.
"""
del_by_exit = False
data_store = DataStoreObject()
logger = Logger()
def __init__(self):
"""
Starts time tracking automatically and logs as info.
"""
self.time = TimeTracking()
logging.info(f"{self.__class__.__name__} started")
def __del__(self):
"""
This is the class finalizer. The code is not executed if already called by exit method to prevent duplicated
logging (__exit__ is always executed before __del__) it this class was used in a with statement.
"""
if not self.del_by_exit:
self.time.stop()
logging.info(f"{self.__class__.__name__} finished after {self.time}")
self.del_by_exit = True
if self.__class__.__name__ == "RunEnvironment":
try:
new_file = os.path.join(self.data_store.get("experiment_path", "general"), "logging.log")
shutil.copyfile(self.logger.log_file, new_file)
except (NameNotFoundInDataStore, FileNotFoundError):
pass
self.data_store.clear_data_store()
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.__del__()
@staticmethod
def do_stuff(length=2):
time.sleep(length)