📄 profile-old.html
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>10.8.1 OldProfile Class </title>
<META NAME="description" CONTENT="10.8.1 OldProfile Class ">
<META NAME="keywords" CONTENT="lib">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="STYLESHEET" href="lib.css" tppabs="http://www.python.org/doc/current/lib/lib.css">
<LINK REL="next" href="profile-HotProfile.html" tppabs="http://www.python.org/doc/current/lib/profile-HotProfile.html">
<LINK REL="previous" href="Profiler_Extensions.html" tppabs="http://www.python.org/doc/current/lib/Profiler_Extensions.html">
<LINK REL="up" href="Profiler_Extensions.html" tppabs="http://www.python.org/doc/current/lib/Profiler_Extensions.html">
<LINK REL="next" href="profile-HotProfile.html" tppabs="http://www.python.org/doc/current/lib/profile-HotProfile.html">
</head>
<body>
<DIV CLASS="navigation"><table align="center" width="100%" cellpadding="0" cellspacing="2">
<tr>
<td><A href="Profiler_Extensions.html" tppabs="http://www.python.org/doc/current/lib/Profiler_Extensions.html"><img src="previous.gif" tppabs="http://www.python.org/doc/current/icons/previous.gif" border="0" height="32"
alt="Previous Page" width="32"></A></td>
<td><A href="Profiler_Extensions.html" tppabs="http://www.python.org/doc/current/lib/Profiler_Extensions.html"><img src="up.gif" tppabs="http://www.python.org/doc/current/icons/up.gif" border="0" height="32"
alt="Up One Level" width="32"></A></td>
<td><A href="profile-HotProfile.html" tppabs="http://www.python.org/doc/current/lib/profile-HotProfile.html"><img src="next.gif" tppabs="http://www.python.org/doc/current/icons/next.gif" border="0" height="32"
alt="Next Page" width="32"></A></td>
<td align="center" width="100%">Python Library Reference</td>
<td><A href="contents.html" tppabs="http://www.python.org/doc/current/lib/contents.html"><img src="contents.gif" tppabs="http://www.python.org/doc/current/icons/contents.gif" border="0" height="32"
alt="Contents" width="32"></A></td>
<td><a href="modindex.html" tppabs="http://www.python.org/doc/current/lib/modindex.html" title="Module Index"><img src="modules.gif" tppabs="http://www.python.org/doc/current/icons/modules.gif" border="0" height="32"
alt="Module Index" width="32"></a></td>
<td><A href="genindex.html" tppabs="http://www.python.org/doc/current/lib/genindex.html"><img src="index.gif" tppabs="http://www.python.org/doc/current/icons/index.gif" border="0" height="32"
alt="Index" width="32"></A></td>
</tr></table>
<b class="navlabel">Previous:</b> <a class="sectref" href="Profiler_Extensions.html" tppabs="http://www.python.org/doc/current/lib/Profiler_Extensions.html">10.8 Extensions </A>
<b class="navlabel">Up:</b> <a class="sectref" href="Profiler_Extensions.html" tppabs="http://www.python.org/doc/current/lib/Profiler_Extensions.html">10.8 Extensions </A>
<b class="navlabel">Next:</b> <a class="sectref" href="profile-HotProfile.html" tppabs="http://www.python.org/doc/current/lib/profile-HotProfile.html">10.8.2 HotProfile Class</A>
<br><hr></DIV>
<!--End of Navigation Panel-->
<H2>
<BR>
10.8.1 OldProfile Class
</H2>
<P>
The following derived profiler simulates the old style profiler,
providing errant results on recursive functions. The reason for the
usefulness of this profiler is that it runs faster (i.e., less
overhead) than the old profiler. It still creates all the caller
stats, and is quite useful when there is <i>no</i> recursion in the
user's code. It is also a lot more accurate than the old profiler, as
it does not charge all its overhead time to the user's code.
<P>
<dl><dd><pre class="verbatim">
class OldProfile(Profile):
def trace_dispatch_exception(self, frame, t):
rt, rtt, rct, rfn, rframe, rcur = self.cur
if rcur and not rframe is frame:
return self.trace_dispatch_return(rframe, t)
return 0
def trace_dispatch_call(self, frame, t):
fn = `frame.f_code`
self.cur = (t, 0, 0, fn, frame, self.cur)
if self.timings.has_key(fn):
tt, ct, callers = self.timings[fn]
self.timings[fn] = tt, ct, callers
else:
self.timings[fn] = 0, 0, {}
return 1
def trace_dispatch_return(self, frame, t):
rt, rtt, rct, rfn, frame, rcur = self.cur
rtt = rtt + t
sft = rtt + rct
pt, ptt, pct, pfn, pframe, pcur = rcur
self.cur = pt, ptt+rt, pct+sft, pfn, pframe, pcur
tt, ct, callers = self.timings[rfn]
if callers.has_key(pfn):
callers[pfn] = callers[pfn] + 1
else:
callers[pfn] = 1
self.timings[rfn] = tt+rtt, ct + sft, callers
return 1
def snapshot_stats(self):
self.stats = {}
for func in self.timings.keys():
tt, ct, callers = self.timings[func]
nor_func = self.func_normalize(func)
nor_callers = {}
nc = 0
for func_caller in callers.keys():
nor_callers[self.func_normalize(func_caller)] = \
callers[func_caller]
nc = nc + callers[func_caller]
self.stats[nor_func] = nc, nc, tt, ct, nor_callers
</pre></dl>
<P>
<DIV CLASS="navigation"><p><hr><table align="center" width="100%" cellpadding="0" cellspacing="2">
<tr>
<td><A href="Profiler_Extensions.html" tppabs="http://www.python.org/doc/current/lib/Profiler_Extensions.html"><img src="previous.gif" tppabs="http://www.python.org/doc/current/icons/previous.gif" border="0" height="32"
alt="Previous Page" width="32"></A></td>
<td><A href="Profiler_Extensions.html" tppabs="http://www.python.org/doc/current/lib/Profiler_Extensions.html"><img src="up.gif" tppabs="http://www.python.org/doc/current/icons/up.gif" border="0" height="32"
alt="Up One Level" width="32"></A></td>
<td><A href="profile-HotProfile.html" tppabs="http://www.python.org/doc/current/lib/profile-HotProfile.html"><img src="next.gif" tppabs="http://www.python.org/doc/current/icons/next.gif" border="0" height="32"
alt="Next Page" width="32"></A></td>
<td align="center" width="100%">Python Library Reference</td>
<td><A href="contents.html" tppabs="http://www.python.org/doc/current/lib/contents.html"><img src="contents.gif" tppabs="http://www.python.org/doc/current/icons/contents.gif" border="0" height="32"
alt="Contents" width="32"></A></td>
<td><a href="modindex.html" tppabs="http://www.python.org/doc/current/lib/modindex.html" title="Module Index"><img src="modules.gif" tppabs="http://www.python.org/doc/current/icons/modules.gif" border="0" height="32"
alt="Module Index" width="32"></a></td>
<td><A href="genindex.html" tppabs="http://www.python.org/doc/current/lib/genindex.html"><img src="index.gif" tppabs="http://www.python.org/doc/current/icons/index.gif" border="0" height="32"
alt="Index" width="32"></A></td>
</tr></table>
<b class="navlabel">Previous:</b> <a class="sectref" href="Profiler_Extensions.html" tppabs="http://www.python.org/doc/current/lib/Profiler_Extensions.html">10.8 Extensions </A>
<b class="navlabel">Up:</b> <a class="sectref" href="Profiler_Extensions.html" tppabs="http://www.python.org/doc/current/lib/Profiler_Extensions.html">10.8 Extensions </A>
<b class="navlabel">Next:</b> <a class="sectref" href="profile-HotProfile.html" tppabs="http://www.python.org/doc/current/lib/profile-HotProfile.html">10.8.2 HotProfile Class</A>
</DIV>
<!--End of Navigation Panel-->
<ADDRESS>
<hr>See <i><a href="about.html" tppabs="http://www.python.org/doc/current/lib/about.html">About this document...</a></i> for information on suggesting changes.
</ADDRESS>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -