Loading [MathJax]/extensions/tex2jax.js
LSST Applications g04a91732dc+cc8870d3f5,g07dc498a13+5aa0b8792f,g0fba68d861+80045be308,g1409bbee79+5aa0b8792f,g1a7e361dbc+5aa0b8792f,g1fd858c14a+f64bc332a9,g208c678f98+1ae86710ed,g35bb328faa+fcb1d3bbc8,g4d2262a081+47ad8a29a8,g4d39ba7253+9633a327c1,g4e0f332c67+5d362be553,g53246c7159+fcb1d3bbc8,g60b5630c4e+9633a327c1,g668ecb457e+25d63fd678,g78460c75b0+2f9a1b4bcd,g786e29fd12+cf7ec2a62a,g7b71ed6315+fcb1d3bbc8,g8852436030+8b64ca622a,g89139ef638+5aa0b8792f,g89e1512fd8+04325574d3,g8d6b6b353c+9633a327c1,g9125e01d80+fcb1d3bbc8,g989de1cb63+5aa0b8792f,g9f33ca652e+b196626af7,ga9baa6287d+9633a327c1,gaaedd4e678+5aa0b8792f,gabe3b4be73+1e0a283bba,gb1101e3267+71e32094df,gb58c049af0+f03b321e39,gb90eeb9370+2807b1ad02,gcf25f946ba+8b64ca622a,gd315a588df+a39986a76f,gd6cbbdb0b4+c8606af20c,gd9a9a58781+fcb1d3bbc8,gde0f65d7ad+4e42d81ab7,ge278dab8ac+932305ba37,ge82c20c137+76d20ab76d,gfe73954cf8+a1301e4c20,w.2025.11
LSST Data Management Base Package
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
lsst.dax.apdb.timer.Timer Class Reference

Public Member Functions

 __init__ (self, str name, *MonAgent|logging.Logger args, _TagsType|None tags=None, int log_level=logging.INFO)
 
None add_values (self, **int|float values)
 
Timer start (self)
 
Timer stop (self)
 
Timer dump (self)
 
tuple[float, float, float] accumulated (self)
 
dict[str, int|float] as_dict (self, str prefix="")
 
str __str__ (self)
 
Timer __enter__ (self)
 
Any __exit__ (self, type|None exc_type, Any exc_val, Any exc_tb)
 

Protected Attributes

 _name = name
 
list _mon_agents = []
 
list _loggers = []
 
 _tags = tags
 
 _log_level = log_level
 
float _startReal = -1.0
 
float _startUser = -1.0
 
float _startSys = -1.0
 
float _sumReal = 0.0
 
float _sumUser = 0.0
 
float _sumSys = 0.0
 
dict _extra_values = {}
 

Detailed Description

Instance of this class can be used to track consumed time.

Parameters
----------
name : `str`
    Timer name, will be use for reporting to both monitoring and logging.
    Typically the name should look like an identifier for ease of use with
    downstream monitoring software.
*args : `MonAgent` or `logging.Logger`
    Positional arguments can include a combination of `MonAgent` and
    `logging.Logger` instances. They will be used to report accumulated
    times on exit from context or by calling `dump` method directly.
tags : `~collections.abc.Mapping` [`str`, `str` or `int`], optional
    Keyword argument, additional tags added to monitoring report and
    logging output.
log_level : `int`, optional
    Keyword argument, level used for logging output, default is
    `logging.INFO`.

Notes
-----
This class is also a context manager and can be used in a `with` statement.
By default it prints consumed CPU time and real time spent in a context.

Example:

    with Timer("SelectTimer", logger):
        engine.execute('SELECT ...')

Definition at line 41 of file timer.py.

Constructor & Destructor Documentation

◆ __init__()

lsst.dax.apdb.timer.Timer.__init__ ( self,
str name,
*MonAgent | logging.Logger args,
_TagsType | None tags = None,
int log_level = logging.INFO )

Definition at line 73 of file timer.py.

79 ):
80 self._name = name
81 self._mon_agents: list[MonAgent] = []
82 self._loggers: list[logging.Logger] = []
83 self._tags = tags
84 self._log_level = log_level
85
86 for arg in args:
87 if isinstance(arg, MonAgent):
88 self._mon_agents.append(arg)
89 elif isinstance(arg, logging.Logger):
90 self._loggers.append(arg)
91
92 self._startReal = -1.0
93 self._startUser = -1.0
94 self._startSys = -1.0
95 self._sumReal = 0.0
96 self._sumUser = 0.0
97 self._sumSys = 0.0
98
99 self._extra_values: dict[str, int | float] = {}
100

Member Function Documentation

◆ __enter__()

Timer lsst.dax.apdb.timer.Timer.__enter__ ( self)
Enter context, start timer

Definition at line 171 of file timer.py.

171 def __enter__(self) -> Timer:
172 """Enter context, start timer"""
173 self.start()
174 return self
175

◆ __exit__()

Any lsst.dax.apdb.timer.Timer.__exit__ ( self,
type | None exc_type,
Any exc_val,
Any exc_tb )
Exit context, stop and dump timer

Definition at line 176 of file timer.py.

176 def __exit__(self, exc_type: type | None, exc_val: Any, exc_tb: Any) -> Any:
177 """Exit context, stop and dump timer"""
178 self.stop()
179 if exc_type is None:
180 self.dump()
181 return False

◆ __str__()

str lsst.dax.apdb.timer.Timer.__str__ ( self)

Definition at line 162 of file timer.py.

162 def __str__(self) -> str:
163 real, user, sys = self.accumulated()
164 info = "real=%.3f user=%.3f sys=%.3f" % (real, user, sys)
165 if self._name:
166 info = self._name + ": " + info
167 if self._tags:
168 info += f" (tags={self._tags})"
169 return info
170

◆ accumulated()

tuple[float, float, float] lsst.dax.apdb.timer.Timer.accumulated ( self)
Return accumulated real, user, and system times in seconds.

Definition at line 139 of file timer.py.

139 def accumulated(self) -> tuple[float, float, float]:
140 """Return accumulated real, user, and system times in seconds."""
141 real = self._sumReal
142 user = self._sumUser
143 sys = self._sumSys
144 if self._startReal > 0:
145 real += time.time() - self._startReal
146 ru = resource.getrusage(resource.RUSAGE_SELF)
147 user += ru.ru_utime - self._startUser
148 sys += ru.ru_stime - self._startSys
149 return (real, user, sys)
150

◆ add_values()

None lsst.dax.apdb.timer.Timer.add_values ( self,
**int | float values )
Add values to dump together with timing information.

Parameters
----------
**values : int | float
    Key/values to add to timer information.

Definition at line 101 of file timer.py.

101 def add_values(self, **values: int | float) -> None:
102 """Add values to dump together with timing information.
103
104 Parameters
105 ----------
106 **values : int | float
107 Key/values to add to timer information.
108 """
109 self._extra_values.update(values)
110

◆ as_dict()

dict[str, int | float] lsst.dax.apdb.timer.Timer.as_dict ( self,
str prefix = "" )
Return timers and extra values as dictionary.

Definition at line 151 of file timer.py.

151 def as_dict(self, prefix: str = "") -> dict[str, int | float]:
152 """Return timers and extra values as dictionary."""
153 real, user, sys = self.accumulated()
154 values = {
155 f"{prefix}real": real,
156 f"{prefix}user": user,
157 f"{prefix}sys": sys,
158 }
159 values.update(self._extra_values)
160 return values
161

◆ dump()

Timer lsst.dax.apdb.timer.Timer.dump ( self)
Dump timer statistics

Definition at line 131 of file timer.py.

131 def dump(self) -> Timer:
132 """Dump timer statistics"""
133 for logger in self._loggers:
134 logger.log(self._log_level, "%s", self)
135 for agent in self._mon_agents:
136 agent.add_record(self._name, values=self.as_dict(), tags=self._tags)
137 return self
138

◆ start()

Timer lsst.dax.apdb.timer.Timer.start ( self)
Start timer.

Definition at line 111 of file timer.py.

111 def start(self) -> Timer:
112 """Start timer."""
113 self._startReal = time.time()
114 ru = resource.getrusage(resource.RUSAGE_SELF)
115 self._startUser = ru.ru_utime
116 self._startSys = ru.ru_stime
117 return self
118

◆ stop()

Timer lsst.dax.apdb.timer.Timer.stop ( self)
Stop timer.

Definition at line 119 of file timer.py.

119 def stop(self) -> Timer:
120 """Stop timer."""
121 if self._startReal > 0:
122 self._sumReal += time.time() - self._startReal
123 ru = resource.getrusage(resource.RUSAGE_SELF)
124 self._sumUser += ru.ru_utime - self._startUser
125 self._sumSys += ru.ru_stime - self._startSys
126 self._startReal = -1.0
127 self._startUser = -1.0
128 self._startSys = -1.0
129 return self
130

Member Data Documentation

◆ _extra_values

lsst.dax.apdb.timer.Timer._extra_values = {}
protected

Definition at line 99 of file timer.py.

◆ _log_level

lsst.dax.apdb.timer.Timer._log_level = log_level
protected

Definition at line 84 of file timer.py.

◆ _loggers

list lsst.dax.apdb.timer.Timer._loggers = []
protected

Definition at line 82 of file timer.py.

◆ _mon_agents

list lsst.dax.apdb.timer.Timer._mon_agents = []
protected

Definition at line 81 of file timer.py.

◆ _name

lsst.dax.apdb.timer.Timer._name = name
protected

Definition at line 80 of file timer.py.

◆ _startReal

float lsst.dax.apdb.timer.Timer._startReal = -1.0
protected

Definition at line 92 of file timer.py.

◆ _startSys

float lsst.dax.apdb.timer.Timer._startSys = -1.0
protected

Definition at line 94 of file timer.py.

◆ _startUser

float lsst.dax.apdb.timer.Timer._startUser = -1.0
protected

Definition at line 93 of file timer.py.

◆ _sumReal

float lsst.dax.apdb.timer.Timer._sumReal = 0.0
protected

Definition at line 95 of file timer.py.

◆ _sumSys

float lsst.dax.apdb.timer.Timer._sumSys = 0.0
protected

Definition at line 97 of file timer.py.

◆ _sumUser

float lsst.dax.apdb.timer.Timer._sumUser = 0.0
protected

Definition at line 96 of file timer.py.

◆ _tags

lsst.dax.apdb.timer.Timer._tags = tags
protected

Definition at line 83 of file timer.py.


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