我在一个项目中用python做业务逻辑部分的代码,但速度不够理想,记录业务逻辑各段代码的用时情况并分析瓶颈就成了必须的工作。于是动手写了下面的ElapsedTime.PY,帮助解决问题。
使用方式如下:
查看执行后生成的log.txt文件中的内容:
2.996 | 0 | sleep(3)
2.000 | 0 | sleep(2)
5.002 | 0 | sleep
import sys
import time
class ElapsedTime:
def __init__(self, scope = ""):
self.scope_name = scope
self.start_time = time.clock()
def reset(self, scope = ""):
self.scope_name = scope
self.start_time = time.clock()
def elapsed(self, threadID = 0, fn = ""): #线程ID暂末处理,只是占个位
result = time.clock() - self.start_time
self.log(("%11.3f | %7d | %s") % (result, threadID, self.scope_name), fn)
def log(self, content, fn = ""):
oldStdout = sys.stdout
sys.stdout = open(fn, "a")
print content
sys.stdout = oldStdout
import time
class ElapsedTime:
def __init__(self, scope = ""):
self.scope_name = scope
self.start_time = time.clock()
def reset(self, scope = ""):
self.scope_name = scope
self.start_time = time.clock()
def elapsed(self, threadID = 0, fn = ""): #线程ID暂末处理,只是占个位
result = time.clock() - self.start_time
self.log(("%11.3f | %7d | %s") % (result, threadID, self.scope_name), fn)
def log(self, content, fn = ""):
oldStdout = sys.stdout
sys.stdout = open(fn, "a")
print content
sys.stdout = oldStdout
使用方式如下:
import time
import ElapsedTime
m = ElapsedTime.ElapsedTime('sleep')
et = ElapsedTime.ElapsedTime('sleep(3)')
time.sleep(3)
et.elapsed(0, 'log.txt')
et.reset('sleep(2)')
time.sleep(2)
et.elapsed(0, 'log.txt')
m.elapsed(0, 'log.txt')
import ElapsedTime
m = ElapsedTime.ElapsedTime('sleep')
et = ElapsedTime.ElapsedTime('sleep(3)')
time.sleep(3)
et.elapsed(0, 'log.txt')
et.reset('sleep(2)')
time.sleep(2)
et.elapsed(0, 'log.txt')
m.elapsed(0, 'log.txt')
查看执行后生成的log.txt文件中的内容:
2.996 | 0 | sleep(3)
2.000 | 0 | sleep(2)
5.002 | 0 | sleep