Source code for asr.core.resources
from .specification import RunSpecification
import typing
import time
import contextlib
from dataclasses import dataclass
[docs]@dataclass
class Resources: # noqa
execution_start: typing.Optional[float] = None
execution_end: typing.Optional[float] = None
execution_duration: typing.Optional[float] = None
ncores: typing.Optional[int] = None
def __str__(self):
lines = []
for key, value in sorted(self.__dict__.items(), key=lambda item: item[0]):
lines.append(f'{key}={value}')
return '\n'.join(lines)
@contextlib.contextmanager
def _register_resources(run_specification: RunSpecification):
from ase.parallel import world
execution_start = time.time()
resources = Resources()
yield resources
execution_end = time.time()
resources.execution_start = execution_start
resources.execution_end = execution_end
resources.execution_duration = execution_end - execution_start
resources.ncores = world.size
def register_resources(): # noqa
def wrapper(func):
def wrapped(run_specification):
with _register_resources(run_specification) as resources:
run_record = func(run_specification)
run_record.resources = resources
return run_record
return wrapped
return wrapper