Belle II Software development
Local.LocalResult Class Reference
Inheritance diagram for Local.LocalResult:
Result

Public Member Functions

 __init__ (self, job, result)
 
 update_status (self)
 
 ready (self)
 
 get_exit_code_from_file (self)
 

Public Attributes

 result = result
 The underlying result from the backend.
 
 job = job
 Job object for result.
 
 time_to_wait_for_exit_code_file = timedelta(minutes=5)
 After our first attempt to view the exit code file once the job is 'finished', how long should we wait for it to exist before timing out?
 
 exit_code_file_initial_time = None
 Time we started waiting for the exit code file to appear.
 

Protected Member Functions

 _update_result_status (self)
 

Protected Attributes

bool _is_ready = False
 Quicker way to know if it's ready once it has already been found.
 

Detailed Description

Result class to help monitor status of jobs submitted by Local backend.

Definition at line 949 of file backends.py.

Constructor & Destructor Documentation

◆ __init__()

__init__ ( self,
job,
result )
Pass in the job object and the multiprocessing result to allow the result to do monitoring and perform
post processing of the job.

Definition at line 954 of file backends.py.

954 def __init__(self, job, result):
955 """
956 Pass in the job object and the multiprocessing result to allow the result to do monitoring and perform
957 post processing of the job.
958 """
959 super().__init__(job)
960
961 self.result = result
962

Member Function Documentation

◆ _update_result_status()

_update_result_status ( self)
protected
Update result status

Definition at line 963 of file backends.py.

963 def _update_result_status(self):
964 """
965 Update result status
966 """
967 if self.result.ready() and (self.job.status not in self.job.exit_statuses):
968 return_code = self.result.get()
969 if return_code:
970 self.job.status = "failed"
971 else:
972 self.job.status = "completed"
973

◆ get_exit_code_from_file()

get_exit_code_from_file ( self)
inherited
Read the exit code file to discover the exit status of the job command. Useful fallback if the job is no longer
known to the job database (batch system purged it for example). Since some backends may take time to download
the output files of the job back to the working directory we use a time limit on how long to wait.

Definition at line 909 of file backends.py.

909 def get_exit_code_from_file(self):
910 """
911 Read the exit code file to discover the exit status of the job command. Useful fallback if the job is no longer
912 known to the job database (batch system purged it for example). Since some backends may take time to download
913 the output files of the job back to the working directory we use a time limit on how long to wait.
914 """
915 if not self.exit_code_file_initial_time:
916 self.exit_code_file_initial_time = datetime.now()
917 exit_code_path = Path(self.job.working_dir, Backend.exit_code_file)
918 with open(exit_code_path) as f:
919 exit_code = int(f.read().strip())
920 B2DEBUG(29, f"Exit code from file for {self.job} was {exit_code}")
921 return exit_code
922
923

◆ ready()

ready ( self)
inherited
Returns whether or not this job result is known to be ready. Doesn't actually change the job status. Just changes
the 'readiness' based on the known job status.

Definition at line 888 of file backends.py.

888 def ready(self):
889 """
890 Returns whether or not this job result is known to be ready. Doesn't actually change the job status. Just changes
891 the 'readiness' based on the known job status.
892 """
893 B2DEBUG(29, f"Calling {self.job}.result.ready()")
894 if self._is_ready:
895 return True
896 elif self.job.status in self.job.exit_statuses:
897 self._is_ready = True
898 return True
899 else:
900 return False
901

◆ update_status()

update_status ( self)
Update the job's (or subjobs') status by calling the result object.

Reimplemented from Result.

Definition at line 974 of file backends.py.

974 def update_status(self):
975 """
976 Update the job's (or subjobs') status by calling the result object.
977 """
978 B2DEBUG(29, f"Calling {self.job}.result.update_status()")
979 if self.job.subjobs:
980 for subjob in self.job.subjobs.values():
981 subjob.result._update_result_status()
982 else:
983 self._update_result_status()
984
985 def join(self):

Member Data Documentation

◆ _is_ready

bool _is_ready = False
protectedinherited

Quicker way to know if it's ready once it has already been found.

Saves a lot of calls to batch system commands.

Definition at line 881 of file backends.py.

◆ exit_code_file_initial_time

exit_code_file_initial_time = None
inherited

Time we started waiting for the exit code file to appear.

Definition at line 886 of file backends.py.

◆ job

job = job
inherited

Job object for result.

Definition at line 879 of file backends.py.

◆ result

result = result

The underlying result from the backend.

Definition at line 961 of file backends.py.

◆ time_to_wait_for_exit_code_file

time_to_wait_for_exit_code_file = timedelta(minutes=5)
inherited

After our first attempt to view the exit code file once the job is 'finished', how long should we wait for it to exist before timing out?

Definition at line 884 of file backends.py.


The documentation for this class was generated from the following file: