LSSTApplications  16.0-10-g9d3e444,16.0-11-g09ed895+3,16.0-11-g12e47bd+4,16.0-11-g9bb73b2+10,16.0-12-g5c924a4+10,16.0-15-g7af1f30,16.0-15-gdd5ca33+2,16.0-16-gf0259e2+1,16.0-17-g31abd91+11,16.0-17-g5cf0468+3,16.0-18-g51a54b3+3,16.0-18-ga4d4bcb+5,16.0-18-gcf94535+2,16.0-19-g9d290d5+2,16.0-2-g0febb12+22,16.0-2-g9d5294e+73,16.0-2-ga8830df+7,16.0-21-g3d035912+2,16.0-26-g8e79609,16.0-28-gfc9ea6c+9,16.0-29-ge8801f9+4,16.0-3-ge00e371+38,16.0-4-g18f3627+17,16.0-4-g5f3a788+21,16.0-4-ga3eb747+11,16.0-4-gabf74b7+33,16.0-4-gb13d127+7,16.0-5-g27fb78a+11,16.0-5-g6a53317+38,16.0-5-gb3f8a4b+91,16.0-51-gbbe9c988+3,16.0-6-g9321be7+5,16.0-6-gcbc7b31+47,16.0-6-gf49912c+33,16.0-7-gd2eeba5+56,16.0-75-gbf7a9a820,16.0-8-g21fd5fe+34,16.0-8-g3a9f023+24,16.0-9-gf3bc169+2,16.0-9-gf5c1f43+12,master-gd73dc1d098+5,w.2019.02
LSSTDataManagementBasePackage
Functions
lsst.pipe.base.timer Namespace Reference

Functions

def logPairs (obj, pairs, logLevel=Log.DEBUG)
 
def logInfo (obj, prefix, logLevel=Log.DEBUG)
 
def timeMethod (func)
 

Function Documentation

◆ logInfo()

def lsst.pipe.base.timer.logInfo (   obj,
  prefix,
  logLevel = Log.DEBUG 
)
Log timer information to ``obj.metadata`` and ``obj.log``.

Parameters
----------
obj : `lsst.pipe.base.Task`-type
    A `~lsst.pipe.base.Task` or any other object with these two attributes:

    - ``metadata`` an instance of `lsst.daf.base.PropertyList`` (or other object with
      ``add(name, value)`` method).
    - ``log`` an instance of `lsst.log.Log`.

prefix
    Name prefix, the resulting entries are ``CpuTime``, etc.. For example timeMethod uses
    ``prefix = Start`` when the method begins and ``prefix = End`` when the method ends.
logLevel : optional
    Log level (an `lsst.log` level constant, such as `lsst.log.Log.DEBUG`).

Notes
-----
Logged items include:

- ``Utc``: UTC date in ISO format (only in metadata since log entries have timestamps).
- ``CpuTime``: CPU time (seconds).
- ``MaxRss``: maximum resident set size.

All logged resource information is only for the current process; child processes are excluded.

Definition at line 62 of file timer.py.

62 def logInfo(obj, prefix, logLevel=Log.DEBUG):
63  """Log timer information to ``obj.metadata`` and ``obj.log``.
64 
65  Parameters
66  ----------
67  obj : `lsst.pipe.base.Task`-type
68  A `~lsst.pipe.base.Task` or any other object with these two attributes:
69 
70  - ``metadata`` an instance of `lsst.daf.base.PropertyList`` (or other object with
71  ``add(name, value)`` method).
72  - ``log`` an instance of `lsst.log.Log`.
73 
74  prefix
75  Name prefix, the resulting entries are ``CpuTime``, etc.. For example timeMethod uses
76  ``prefix = Start`` when the method begins and ``prefix = End`` when the method ends.
77  logLevel : optional
78  Log level (an `lsst.log` level constant, such as `lsst.log.Log.DEBUG`).
79 
80  Notes
81  -----
82  Logged items include:
83 
84  - ``Utc``: UTC date in ISO format (only in metadata since log entries have timestamps).
85  - ``CpuTime``: CPU time (seconds).
86  - ``MaxRss``: maximum resident set size.
87 
88  All logged resource information is only for the current process; child processes are excluded.
89  """
90  cpuTime = time.clock()
91  utcStr = datetime.datetime.utcnow().isoformat()
92  res = resource.getrusage(resource.RUSAGE_SELF)
93  obj.metadata.add(name=prefix + "Utc", value=utcStr) # log messages already have timestamps
94  logPairs(obj=obj,
95  pairs=[
96  (prefix + "CpuTime", cpuTime),
97  (prefix + "UserTime", res.ru_utime),
98  (prefix + "SystemTime", res.ru_stime),
99  (prefix + "MaxResidentSetSize", int(res.ru_maxrss)),
100  (prefix + "MinorPageFaults", int(res.ru_minflt)),
101  (prefix + "MajorPageFaults", int(res.ru_majflt)),
102  (prefix + "BlockInputs", int(res.ru_inblock)),
103  (prefix + "BlockOutputs", int(res.ru_oublock)),
104  (prefix + "VoluntaryContextSwitches", int(res.ru_nvcsw)),
105  (prefix + "InvoluntaryContextSwitches", int(res.ru_nivcsw)),
106  ],
107  logLevel=logLevel,
108  )
109 
110 
def logInfo(obj, prefix, logLevel=Log.DEBUG)
Definition: timer.py:62
def logPairs(obj, pairs, logLevel=Log.DEBUG)
Definition: timer.py:34

◆ logPairs()

def lsst.pipe.base.timer.logPairs (   obj,
  pairs,
  logLevel = Log.DEBUG 
)
Log ``(name, value)`` pairs to ``obj.metadata`` and ``obj.log``

Parameters
----------
obj : `lsst.pipe.base.Task`-type
    A `~lsst.pipe.base.Task` or any other object with these two attributes:

    - ``metadata`` an instance of `lsst.daf.base.PropertyList`` (or other object with
      ``add(name, value)`` method).
    - ``log`` an instance of `lsst.log.Log`.

pairs : sequence
    A sequence of ``(name, value)`` pairs, with value typically numeric.
logLevel : optional
    Log level (an `lsst.log` level constant, such as `lsst.log.Log.DEBUG`).

Definition at line 34 of file timer.py.

34 def logPairs(obj, pairs, logLevel=Log.DEBUG):
35  """Log ``(name, value)`` pairs to ``obj.metadata`` and ``obj.log``
36 
37  Parameters
38  ----------
39  obj : `lsst.pipe.base.Task`-type
40  A `~lsst.pipe.base.Task` or any other object with these two attributes:
41 
42  - ``metadata`` an instance of `lsst.daf.base.PropertyList`` (or other object with
43  ``add(name, value)`` method).
44  - ``log`` an instance of `lsst.log.Log`.
45 
46  pairs : sequence
47  A sequence of ``(name, value)`` pairs, with value typically numeric.
48  logLevel : optional
49  Log level (an `lsst.log` level constant, such as `lsst.log.Log.DEBUG`).
50  """
51  strList = []
52  for name, value in pairs:
53  try:
54  # Use LongLong explicitly here in case an early value in the sequence is int-sized
55  obj.metadata.addLongLong(name, value)
56  except TypeError:
57  obj.metadata.add(name, value)
58  strList.append("%s=%s" % (name, value))
59  log(obj.log.getName(), logLevel, "; ".join(strList))
60 
61 
def logPairs(obj, pairs, logLevel=Log.DEBUG)
Definition: timer.py:34

◆ timeMethod()

def lsst.pipe.base.timer.timeMethod (   func)
Decorator to measure duration of a task method.

Parameters
----------
func
    The method to wrap.

Notes
-----
Writes various measures of time and possibly memory usage to the task's metadata; all items are prefixed
with the function name.

.. warning::

   This decorator only works with instance methods of Task, or any class with these attributes:

   - ``metadata``: an instance of `lsst.daf.base.PropertyList` (or other object with
     ``add(name, value)`` method).
   - ``log``: an instance of `lsst.log.Log`.

Examples
--------
To use::

    import lsst.pipe.base as pipeBase
    class FooTask(pipeBase.Task):
        pass

        @pipeBase.timeMethod
        def run(self, ...): # or any other instance method you want to time
            pass

Definition at line 111 of file timer.py.

111 def timeMethod(func):
112  """Decorator to measure duration of a task method.
113 
114  Parameters
115  ----------
116  func
117  The method to wrap.
118 
119  Notes
120  -----
121  Writes various measures of time and possibly memory usage to the task's metadata; all items are prefixed
122  with the function name.
123 
124  .. warning::
125 
126  This decorator only works with instance methods of Task, or any class with these attributes:
127 
128  - ``metadata``: an instance of `lsst.daf.base.PropertyList` (or other object with
129  ``add(name, value)`` method).
130  - ``log``: an instance of `lsst.log.Log`.
131 
132  Examples
133  --------
134  To use::
135 
136  import lsst.pipe.base as pipeBase
137  class FooTask(pipeBase.Task):
138  pass
139 
140  @pipeBase.timeMethod
141  def run(self, ...): # or any other instance method you want to time
142  pass
143  """
144 
145  @functools.wraps(func)
146  def wrapper(self, *args, **keyArgs):
147  logInfo(obj=self, prefix=func.__name__ + "Start")
148  try:
149  res = func(self, *args, **keyArgs)
150  finally:
151  logInfo(obj=self, prefix=func.__name__ + "End")
152  return res
153  return wrapper
154 
def logInfo(obj, prefix, logLevel=Log.DEBUG)
Definition: timer.py:62
def timeMethod(func)
Definition: timer.py:111