Source
################################################################################################################
#!/usr/bin/env python
import thread # To handle service threads like monitoring
import time # To handle sleep times
import traceback # To pretty-print tracebacks
import os
from taskinit import casalog
# Import MPIEnvironment static class
from MPIEnvironment import MPIEnvironment
# Import MPICommunicator singleton
from MPICommunicator import MPICommunicator
class MPIMonitorServer:
# Storage for the MPIMonitorServer singleton instance reference
__instance = None
def __init__(self,start_services=True):
""" Create MPIMonitorServer singleton instance """
casalog_call_origin = "MPIMonitorServer::__init__"
# Check if MPI is effectively enabled
if not MPIEnvironment.is_mpi_enabled:
msg = "MPI is not enabled"
casalog.post(msg,"SEVERE",casalog_call_origin)
raise Exception(msg)
# Check if MPIMonitorServer can be instantiated
if MPIEnvironment.is_mpi_client:
msg = "MPIMonitorServer cannot be instantiated at master MPI process"
casalog.post(msg,"SEVERE",casalog_call_origin)
raise Exception(msg)
# Check whether we already have a MPIMonitorServer singleton instance
if MPIMonitorServer.__instance is None:
# Create MPIMonitorServer singleton instance
MPIMonitorServer.__instance = MPIMonitorServer.__MPIMonitorServerImpl(start_services=start_services)
# Store MPIMonitorServer singleton instance reference as the only member in the handle
self.__dict__['_MPIMonitorServer__instance'] = MPIMonitorServer.__instance
def __getattr__(self, attr):
""" Delegate access to MPIMonitorServer implementation """
return getattr(self.__instance, attr)
def __setattr__(self, attr, value):
""" Delegate access to MPIMonitorServer implementation """
return setattr(self.__instance, attr, value)
class __MPIMonitorServerImpl:
""" Implementation of the MPIMonitorServer singleton interface """
def __init__(self,start_services=True):
# Initialize status state dict
self.__status = {}