"""High-perfomance logging profiler, mostly written in C."""
from _hotshot
import ProfilerError
def __init__(self
, logfn
, lineevents
=0, linetimings
=1):
self
.lineevents
= lineevents
and 1 or 0
self
.linetimings
= (linetimings
and lineevents
) and 1 or 0
self
._prof
= p
= _hotshot
.profiler(
logfn
, self
.lineevents
, self
.linetimings
)
# Attempt to avoid confusing results caused by the presence of
# Python wrappers around these functions, but only if we can
# be sure the methods have not been overridden or extended.
if self
.__class
__ is Profile
:
"""Close the logfile and terminate the profiler."""
"""Return the file descriptor of the profiler's log file."""
return self
._prof
.fileno()
"""Start the profiler."""
def addinfo(self
, key
, value
):
"""Add an arbitrary labelled value to the profile log."""
self
._prof
.addinfo(key
, value
)
# These methods offer the same interface as the profile.Profile class,
# but delegate most of the work to the C implementation underneath.
"""Profile an exec-compatible string in the script
The globals from the __main__ module are used as both the
globals and locals for the script.
return self
.runctx(cmd
, dict, dict)
def runctx(self
, cmd
, globals, locals):
"""Evaluate an exec-compatible string in a specific
The string is compiled before profiling begins.
code
= compile(cmd
, "<string>", "exec")
self
._prof
.runcode(code
, globals, locals)
def runcall(self
, func
, *args
, **kw
):
"""Profile a single call of a callable.
Additional positional and keyword arguments may be passed
along; the result of the call is returned, and exceptions are
allowed to propogate cleanly, while ensuring that profiling is
return self
._prof
.runcall(func
, args
, kw
)