LSSTApplications  19.0.0-14-gb0260a2+72efe9b372,20.0.0+7927753e06,20.0.0+8829bf0056,20.0.0+995114c5d2,20.0.0+b6f4b2abd1,20.0.0+bddc4f4cbe,20.0.0-1-g253301a+8829bf0056,20.0.0-1-g2b7511a+0d71a2d77f,20.0.0-1-g5b95a8c+7461dd0434,20.0.0-12-g321c96ea+23efe4bbff,20.0.0-16-gfab17e72e+fdf35455f6,20.0.0-2-g0070d88+ba3ffc8f0b,20.0.0-2-g4dae9ad+ee58a624b3,20.0.0-2-g61b8584+5d3db074ba,20.0.0-2-gb780d76+d529cf1a41,20.0.0-2-ged6426c+226a441f5f,20.0.0-2-gf072044+8829bf0056,20.0.0-2-gf1f7952+ee58a624b3,20.0.0-20-geae50cf+e37fec0aee,20.0.0-25-g3dcad98+544a109665,20.0.0-25-g5eafb0f+ee58a624b3,20.0.0-27-g64178ef+f1f297b00a,20.0.0-3-g4cc78c6+e0676b0dc8,20.0.0-3-g8f21e14+4fd2c12c9a,20.0.0-3-gbd60e8c+187b78b4b8,20.0.0-3-gbecbe05+48431fa087,20.0.0-38-ge4adf513+a12e1f8e37,20.0.0-4-g97dc21a+544a109665,20.0.0-4-gb4befbc+087873070b,20.0.0-4-gf910f65+5d3db074ba,20.0.0-5-gdfe0fee+199202a608,20.0.0-5-gfbfe500+d529cf1a41,20.0.0-6-g64f541c+d529cf1a41,20.0.0-6-g9a5b7a1+a1cd37312e,20.0.0-68-ga3f3dda+5fca18c6a4,20.0.0-9-g4aef684+e18322736b,w.2020.45
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``: System + User CPU time (seconds). This should only be used
    in differential measurements; the time reference point is undefined.
- ``MaxRss``: maximum resident set size.

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

Definition at line 63 of file timer.py.

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

◆ 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
43  object with ``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
55  # sequence is int-sized
56  obj.metadata.addLongLong(name, value)
57  except TypeError:
58  obj.metadata.add(name, value)
59  strList.append(f"{name}={value}")
60  log("timer." + obj.log.getName(), logLevel, "; ".join(strList))
61 
62 

◆ 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:

.. code-block:: python

    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 116 of file timer.py.

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