HTopOfAllServersTimeRes (int) : time in second between two measures of CPU/Mem of any of server
"""
import SALOMERuntime
- dump_thread = None
import pilot
import os
import contextlib
self._proc.shutdown(self._shutdown)
salome.dsm.shutdownScopes()
my_runtime_yacs.fini( False )
+
+ class AutoDumpThread:
+ def __init__(self, proc, dump, xmlfilename):
+ self._dumpFile = "dumpState_{}".format( os.path.basename(xmlfilename) )
+ self._lockFile = "{}.lock".format( os.path.splitext( os.path.basename(xmlfilename) )[0] )
+ def __enter__(self):
+ logging.info(f"Ready to launch thread of state dump with dumpFile = {self._dumpFile} lockFile = {self._lockFile}")
+ self._dump_thread = SALOMERuntime.ThreadDumpState(proc,dump,dumpFile,lockFile)
+ self._dump_thread.start()
+ def __exit__(self,exctype, exc, tb):
+ self._dump_thread.join()
def MonitoringDirectories( DirectoriesToMonitor ):
import SALOME_PyNode
if len( DirectoriesToMonitor ) > 0:
return [ SALOME_PyNode.GenericPythonMonitoringLauncherCtxMgr( SALOME_PyNode.FileSystemMonitoring(timeRes*1000,zeDir,zeDirRes) ) for zeDir,zeDirRes,timeRes in DirectoriesToMonitor ]
else:
- return [ contextlib.nullcontext() ]
+ return [ ]
def MonitoringThisProcess(HTopOfThisProcessFile,HTopTimeRes):
import SALOME_PyNode
if HTopOfThisProcessFile:
- return SALOME_PyNode.GenericPythonMonitoringLauncherCtxMgr( SALOME_PyNode.CPUMemoryMonitoring(1000*HTopTimeRes,HTopOfThisProcessFile) )
+ return [ SALOME_PyNode.GenericPythonMonitoringLauncherCtxMgr( SALOME_PyNode.CPUMemoryMonitoring(1000*HTopTimeRes,HTopOfThisProcessFile) ) ]
else:
- return contextlib.nullcontext()
+ return [ ]
def MonitoringAllKernelServers(HTopOfAllServersFile, HTopOfAllServersTimeRes):
if HTopOfAllServersFile:
- return salome.LogManagerLaunchMonitoringFileCtxMgr( 1000*HTopOfAllServersTimeRes, HTopOfAllServersFile )
+ return [ salome.LogManagerLaunchMonitoringFileCtxMgr( 1000*HTopOfAllServersTimeRes, HTopOfAllServersFile ) ]
else:
- return contextlib.nullcontext()
+ return [ ]
+
+ #
+ salome.cm.SetDeltaTimeBetweenCPUMemMeasureInMilliSecond( 1000*CPUMemContainerTimeRes )
+ # Start part of context manager instances
+ ctxManagers = MonitoringDirectories( DirectoriesToMonitor ) + MonitoringThisProcess(HTopOfThisProcessFile, HTopTimeRes) + MonitoringAllKernelServers(HTopOfAllServersFile, HTopOfAllServersTimeRes)
#
if dump != 0:
- dumpFile = "dumpState_{}".format( os.path.basename(xmlfilename) )
- lockFile = "{}.lock".format( os.path.splitext( os.path.basename(xmlfilename) )[0] )
- dump_thread = SALOMERuntime.ThreadDumpState(proc,dump,dumpFile,lockFile)
- dump_thread.start()
+ ctxManagers += [ AutoDumpThread(proc,dump,xmlfilename) ]
#
- salome.cm.SetDeltaTimeBetweenCPUMemMeasureInMilliSecond( 1000*CPUMemContainerTimeRes )
+ ctxManagers += [ AutoShutdown(proc,shutdown) ]
+ # end of part of context managers
+ with contextlib.ExitStack() as stack:
+ for mgr in ctxManagers:
+ stack.enter_context(mgr)
+ executor.RunPy(proc,display,isPyThread=True,fromscratch=True) # same as RunW but releasing GIL
#
- ctxManagers = MonitoringDirectories( DirectoriesToMonitor ) + [ MonitoringThisProcess(HTopOfThisProcessFile, HTopTimeRes) ] + [ MonitoringAllKernelServers(HTopOfAllServersFile, HTopOfAllServersTimeRes) ]
-
- with AutoShutdown(proc,shutdown):
- with contextlib.ExitStack() as stack:
- for mgr in ctxManagers:
- stack.enter_context(mgr)
- executor.RunPy(proc,display,isPyThread=True,fromscratch=True) # same as RunW but releasing GIL
- #
- if dump_thread:
- dump_thread.join()
- #
- if proc.getEffectiveState() != pilot.DONE:
- raise RuntimeError( proc.getErrorReport() )
+ if proc.getEffectiveState() != pilot.DONE:
+ raise RuntimeError( proc.getErrorReport() )
#
if display > 0:
proc.writeDotInFile("titi")