LSST Applications g0f08755f38+c89d42e150,g1635faa6d4+b6cf076a36,g1653933729+a8ce1bb630,g1a0ca8cf93+4c08b13bf7,g28da252d5a+f33f8200ef,g29321ee8c0+0187be18b1,g2bbee38e9b+9634bc57db,g2bc492864f+9634bc57db,g2cdde0e794+c2c89b37c4,g3156d2b45e+41e33cbcdc,g347aa1857d+9634bc57db,g35bb328faa+a8ce1bb630,g3a166c0a6a+9634bc57db,g3e281a1b8c+9f2c4e2fc3,g414038480c+077ccc18e7,g41af890bb2+e740673f1a,g5fbc88fb19+17cd334064,g7642f7d749+c89d42e150,g781aacb6e4+a8ce1bb630,g80478fca09+f8b2ab54e1,g82479be7b0+e2bd23ab8b,g858d7b2824+c89d42e150,g9125e01d80+a8ce1bb630,g9726552aa6+10f999ec6a,ga5288a1d22+065360aec4,gacf8899fa4+9553554aa7,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gbd46683f8f+ac57cbb13d,gc28159a63d+9634bc57db,gcf0d15dbbd+e37acf7834,gda3e153d99+c89d42e150,gda6a2b7d83+e37acf7834,gdaeeff99f8+1711a396fd,ge2409df99d+cb1e6652d6,ge79ae78c31+9634bc57db,gf0baf85859+147a0692ba,gf3967379c6+02b11634a5,w.2024.45
LSST Data Management Base Package
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes | List of all members
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
 
 _tags
 
 _log_level
 
 _startReal
 
 _startUser
 
 _startSys
 
 _sumReal
 
 _sumUser
 
 _sumSys
 
 _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 159 of file timer.py.

◆ _log_level

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

Definition at line 84 of file timer.py.

◆ _name

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

Definition at line 80 of file timer.py.

◆ _startReal

lsst.dax.apdb.timer.Timer._startReal
protected

Definition at line 92 of file timer.py.

◆ _startSys

lsst.dax.apdb.timer.Timer._startSys
protected

Definition at line 94 of file timer.py.

◆ _startUser

lsst.dax.apdb.timer.Timer._startUser
protected

Definition at line 93 of file timer.py.

◆ _sumReal

lsst.dax.apdb.timer.Timer._sumReal
protected

Definition at line 95 of file timer.py.

◆ _sumSys

lsst.dax.apdb.timer.Timer._sumSys
protected

Definition at line 97 of file timer.py.

◆ _sumUser

lsst.dax.apdb.timer.Timer._sumUser
protected

Definition at line 96 of file timer.py.

◆ _tags

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

Definition at line 83 of file timer.py.


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