mirror of
https://github.com/python/cpython.git
synced 2025-09-27 10:50:04 +00:00
more robust coding, adapted for mac
This commit is contained in:
parent
59c473be99
commit
4f399fb642
2 changed files with 23 additions and 23 deletions
|
@ -43,11 +43,10 @@ import marshal
|
||||||
# Global variables
|
# Global variables
|
||||||
func_norm_dict = {}
|
func_norm_dict = {}
|
||||||
func_norm_counter = 0
|
func_norm_counter = 0
|
||||||
pid_string = `os.getpid()`
|
if hasattr(os, 'getpid'):
|
||||||
|
pid_string = `os.getpid()`
|
||||||
|
else:
|
||||||
# Optimized intermodule references
|
pid_string = ''
|
||||||
ostimes = os.times
|
|
||||||
|
|
||||||
|
|
||||||
# Sample timer for use with
|
# Sample timer for use with
|
||||||
|
@ -137,7 +136,7 @@ def help():
|
||||||
#**************************************************************************
|
#**************************************************************************
|
||||||
class Profile:
|
class Profile:
|
||||||
|
|
||||||
def __init__(self, *arg):
|
def __init__(self, timer=None):
|
||||||
self.timings = {}
|
self.timings = {}
|
||||||
self.cur = None
|
self.cur = None
|
||||||
self.cmd = ""
|
self.cmd = ""
|
||||||
|
@ -148,18 +147,22 @@ class Profile:
|
||||||
'exception': self.trace_dispatch_exception, \
|
'exception': self.trace_dispatch_exception, \
|
||||||
}
|
}
|
||||||
|
|
||||||
if not arg:
|
if not timer:
|
||||||
|
if hasattr(os, 'times'):
|
||||||
self.timer = os.times
|
self.timer = os.times
|
||||||
self.dispatcher = self.trace_dispatch
|
self.dispatcher = self.trace_dispatch
|
||||||
else:
|
else:
|
||||||
self.timer = arg[0]
|
self.timer = time.time
|
||||||
|
self.dispatcher = self.trace_dispatch_i
|
||||||
|
else:
|
||||||
|
self.timer = timer
|
||||||
t = self.timer() # test out timer function
|
t = self.timer() # test out timer function
|
||||||
try:
|
try:
|
||||||
if len(t) == 2:
|
if len(t) == 2:
|
||||||
self.dispatcher = self.trace_dispatch
|
self.dispatcher = self.trace_dispatch
|
||||||
else:
|
else:
|
||||||
self.dispatcher = self.trace_dispatch_r
|
self.dispatcher = self.trace_dispatch_l
|
||||||
except:
|
except TypeError:
|
||||||
self.dispatcher = self.trace_dispatch_i
|
self.dispatcher = self.trace_dispatch_i
|
||||||
self.t = self.get_time()
|
self.t = self.get_time()
|
||||||
self.simulate_call('profiler')
|
self.simulate_call('profiler')
|
||||||
|
@ -373,9 +376,9 @@ class Profile:
|
||||||
return func_norm_dict[func_name]
|
return func_norm_dict[func_name]
|
||||||
if type(func_name) == type(""):
|
if type(func_name) == type(""):
|
||||||
long_name = string.split(func_name)
|
long_name = string.split(func_name)
|
||||||
file_name = long_name[6][1:-2]
|
file_name = long_name[-3][1:-2]
|
||||||
func = long_name[2]
|
func = long_name[2]
|
||||||
lineno = long_name[8][:-1]
|
lineno = long_name[-1][:-1]
|
||||||
if '?' == func: # Until I find out how to may 'em...
|
if '?' == func: # Until I find out how to may 'em...
|
||||||
file_name = 'python'
|
file_name = 'python'
|
||||||
func_norm_counter = func_norm_counter + 1
|
func_norm_counter = func_norm_counter + 1
|
||||||
|
@ -398,7 +401,7 @@ class Profile:
|
||||||
|
|
||||||
def runctx(self, cmd, globals, locals):
|
def runctx(self, cmd, globals, locals):
|
||||||
self.set_cmd(cmd)
|
self.set_cmd(cmd)
|
||||||
sys.setprofile(self.trace_dispatch)
|
sys.setprofile(self.dispatcher)
|
||||||
try:
|
try:
|
||||||
exec cmd in globals, locals
|
exec cmd in globals, locals
|
||||||
finally:
|
finally:
|
||||||
|
@ -407,7 +410,7 @@ class Profile:
|
||||||
# This method is more useful to profile a single function call.
|
# This method is more useful to profile a single function call.
|
||||||
def runcall(self, func, *args):
|
def runcall(self, func, *args):
|
||||||
self.set_cmd(`func`)
|
self.set_cmd(`func`)
|
||||||
sys.setprofile(self.trace_dispatch)
|
sys.setprofile(self.dispatcher)
|
||||||
try:
|
try:
|
||||||
apply(func, args)
|
apply(func, args)
|
||||||
finally:
|
finally:
|
||||||
|
|
|
@ -116,13 +116,10 @@ class Stats:
|
||||||
except: # in case this is not unix
|
except: # in case this is not unix
|
||||||
pass
|
pass
|
||||||
self.files = [ arg ]
|
self.files = [ arg ]
|
||||||
elif type(arg) == type(self):
|
elif hasattr(arg, 'create_stats'):
|
||||||
try:
|
|
||||||
arg.create_stats()
|
arg.create_stats()
|
||||||
self.stats = arg.stats
|
self.stats = arg.stats
|
||||||
arg.stats = {}
|
arg.stats = {}
|
||||||
except:
|
|
||||||
pass
|
|
||||||
if not self.stats:
|
if not self.stats:
|
||||||
raise TypeError, "Cannot create or construct a " \
|
raise TypeError, "Cannot create or construct a " \
|
||||||
+ `self.__class__` \
|
+ `self.__class__` \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue