Source code for perfmon.common.pid.__init__

"""This module contains class for detecting process PIDs for various schedulers"""

import os
import logging

from perfmon.common.pid.pid import find_job_pid

_log = logging.getLogger(__name__)

# pylint: disable=E0401,W0201,C0301


[docs]class GetJobPid(object): """Class to get the main job PID for different workload managers. Currently SLURM, PBS and OAR schedulers are supported """ def __init__(self, config): self.config = config.copy() # Initiliase scheduler config dict self.scheduler = {} # Get username self.scheduler['user_name'] = os.environ['USER'] # Get PID of the current script self.scheduler['current_pid'] = os.getpid() # Get scheduler name self.scheduler['name'] = config['scheduler'] # Get job ID self.scheduler['job_id'] = config['job_id'] # Get current node's hostname self.scheduler['node_name'] = config['node_name'] # Get SLURM submit node self.scheduler['master_node'] = config['master_node'] # Get launcher type self.scheduler['launcher'] = config['launcher'] # Get script name self.scheduler['script_names'] = [ config['script_name'], 'python', 'python3', 'coverage', ] # define timeout (sec) self.scheduler['timeout'] = 5 # define maximum try outs (sec) self.scheduler['max_retries'] = 5
[docs] def go(self): """This is driver method to find job PID""" # Try to find PID from scheduler specific implementation pid = find_job_pid(self.scheduler['name'].lower(), self.scheduler) # If not found, fallback to naive method if pid is None: pid = find_job_pid('naive', self.scheduler) return pid