LSSTApplications
19.0.0,19.0.0+1,19.0.0+10,19.0.0+13,19.0.0+3,19.0.0+5,19.0.0+9,tickets.DM-22703-ga158cbef15,w.2019.51
LSSTDataManagementBasePackage
stack
Linux64
dax_ppdb
19.0.0+1
python
lsst
dax
ppdb
timer.py
Go to the documentation of this file.
1
# This file is part of dax_ppdb.
2
#
3
# Developed for the LSST Data Management System.
4
# This product includes software developed by the LSST Project
5
# (http://www.lsst.org).
6
# See the COPYRIGHT file at the top-level directory of this distribution
7
# for details of code ownership.
8
#
9
# This program is free software: you can redistribute it and/or modify
10
# it under the terms of the GNU General Public License as published by
11
# the Free Software Foundation, either version 3 of the License, or
12
# (at your option) any later version.
13
#
14
# This program is distributed in the hope that it will be useful,
15
# but WITHOUT ANY WARRANTY; without even the implied warranty of
16
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
# GNU General Public License for more details.
18
#
19
# You should have received a copy of the GNU General Public License
20
# along with this program. If not, see <http://www.gnu.org/licenses/>.
21
22
"""Module with methods to return timing information.
23
24
This was developed as a part of a prototype for performance studies. It
25
could probably be removed in the production system.
26
"""
27
28
29
import
logging
30
import
resource
31
import
time
32
33
34
_LOG = logging.getLogger(__name__.partition(
"."
)[2])
# strip leading "lsst."
35
36
37
class
Timer
(
object
):
38
"""
39
Instance of this class can be used to track consumed time.
40
41
This class is also a context manager and can be used in
42
a `with` statement. By default it prints consumed CPU time
43
and real time spent in a context.
44
45
Example:
46
47
with Timer('SelectTimer'):
48
engine.execute('SELECT ...')
49
50
"""
51
def
__init__
(self, name="", doPrint=True):
52
"""
53
@param name: Time name, will be printed together with statistics
54
@param doPrint: if True then print statistics on exist from context
55
"""
56
self.
_name
= name
57
self.
_print
= doPrint
58
59
self.
_startReal
=
None
60
self.
_startUser
=
None
61
self.
_startSys
=
None
62
self.
_sumReal
= 0.
63
self.
_sumUser
= 0.
64
self.
_sumSys
= 0.
65
66
def
start
(self):
67
"""
68
Start timer.
69
"""
70
self.
_startReal
= time.time()
71
ru = resource.getrusage(resource.RUSAGE_SELF)
72
self.
_startUser
= ru.ru_utime
73
self.
_startSys
= ru.ru_stime
74
return
self
75
76
def
stop
(self):
77
"""
78
Stop timer.
79
"""
80
if
self.
_startReal
is
not
None
:
81
self.
_sumReal
+= time.time() - self.
_startReal
82
ru = resource.getrusage(resource.RUSAGE_SELF)
83
self.
_sumUser
+= ru.ru_utime - self.
_startUser
84
self.
_sumSys
+= ru.ru_stime - self.
_startSys
85
self.
_startReal
=
None
86
self.
_startUser
=
None
87
self.
_startSys
=
None
88
return
self
89
90
def
dump
(self):
91
"""
92
Dump timer statistics
93
"""
94
_LOG.info(
"%s"
, self)
95
return
self
96
97
def
__str__
(self):
98
real = self.
_sumReal
99
user = self.
_sumUser
100
sys = self.
_sumSys
101
if
self.
_startReal
is
not
None
:
102
real += time.time() - self.
_startReal
103
ru = resource.getrusage(resource.RUSAGE_SELF)
104
user += ru.ru_utime - self.
_startUser
105
sys += ru.ru_stime - self.
_startSys
106
info =
"real=%.3f user=%.3f sys=%.3f"
% (real, user, sys)
107
if
self.
_name
:
108
info = self.
_name
+
": "
+ info
109
return
info
110
111
def
__enter__
(self):
112
"""
113
Enter context, start timer
114
"""
115
self.
start
()
116
return
self
117
118
def
__exit__
(self, exc_type, exc_val, exc_tb):
119
"""
120
Exit context, stop and dump timer
121
"""
122
if
exc_type
is
None
:
123
self.
stop
()
124
if
self.
_print
:
125
self.
dump
()
126
return
False
lsst.dax.ppdb.timer.Timer._startReal
_startReal
Definition:
timer.py:59
lsst.dax.ppdb.timer.Timer._sumUser
_sumUser
Definition:
timer.py:63
lsst.dax.ppdb.timer.Timer.__exit__
def __exit__(self, exc_type, exc_val, exc_tb)
Definition:
timer.py:118
lsst.dax.ppdb.timer.Timer.stop
def stop(self)
Definition:
timer.py:76
lsst.dax.ppdb.timer.Timer.__enter__
def __enter__(self)
Definition:
timer.py:111
lsst.dax.ppdb.timer.Timer.__init__
def __init__(self, name="", doPrint=True)
Definition:
timer.py:51
lsst.dax.ppdb.timer.Timer.start
def start(self)
Definition:
timer.py:66
lsst.dax.ppdb.timer.Timer.dump
def dump(self)
Definition:
timer.py:90
lsst.dax.ppdb.timer.Timer
Definition:
timer.py:37
object
lsst.dax.ppdb.timer.Timer._print
_print
Definition:
timer.py:57
lsst.dax.ppdb.timer.Timer._sumSys
_sumSys
Definition:
timer.py:64
lsst.dax.ppdb.timer.Timer.__str__
def __str__(self)
Definition:
timer.py:97
lsst.dax.ppdb.timer.Timer._startSys
_startSys
Definition:
timer.py:61
lsst.dax.ppdb.timer.Timer._startUser
_startUser
Definition:
timer.py:60
lsst.dax.ppdb.timer.Timer._name
_name
Definition:
timer.py:56
lsst.dax.ppdb.timer.Timer._sumReal
_sumReal
Definition:
timer.py:62
Generated on Mon Dec 23 2019 19:03:32 for LSSTApplications by
1.8.13