我试图在两次代码之间进行性能测试。首先,我获取环境的本地时间,运行代码进行性能测试,然后再次获取当地时间。之后,我减去时间,看看测试花了多长时间。我想要精确到几分钟,几秒和几微秒 我觉得有趣的是,如果我在每次抽出时间之后设置打印,这都有效:
startTest= datetime.datetime.now()
print startTest
我得到:
TotalTime: 0:00:00.328000
然而,如果我在获得当地时间之后没有添加任何打印语句,它就会失败,这就是我在做什么:
import datetime
startTest= datetime.datetime.now()
#Code to be Tested#
endTest= datetime.datetime.now()
testTime = endTest - startTest
print 'TotalTime: ',testTime
这给了我以下输出:
TotalTime: 0:00:00
任何想法如何让它以0:00:00.000000
格式打印出来?
答案 0 :(得分:1)
这不会直接回答您的问题,但您可以查看Pythons timeit
模块
http://docs.python.org/2/library/timeit.html
这是用于小代码片段的性能测试。
答案 1 :(得分:0)
仅当microseconds
对象的datetime.timedelta
属性中存在非零值时,才会打印微秒。
如果您想要不同的行为,请编写自己的字符串格式化函数。类似的东西:
def delta_to_string(tdelta):
return '%s days, %02d:%02d:%09.6f' % (
tdelta.days,
tdelta.seconds / 3600,
(tdelta.seconds / 60) % 60,
(tdelta.seconds % 60) + (tdelta.microseconds / 10**6.))
%09.6f
格式表示包含十进制的浮点数总共9位数,必要时加前导0,小数部分最多加6位数。如果你想要更多或更少的数字,你必须改变总位数和小数部分 - 10位小数将是%013.10f
。
这将打印timedelta
对象的每个部分。我们来试试吧:
>>> delta_to_string((datetime.datetime.now() - datetime.datetime.now()))
'0 days, 00:00:00.000000'
我认为如果天数为0,我想保留不打印天数的功能......
def delta_to_string(tdelta):
return '%s%02d:%02d:%09.6f' % (
('%s days, ' % tdelta.days) if tdelta.days else '',
tdelta.seconds / 3600,
(tdelta.seconds / 60) % 60,
(tdelta.seconds % 60) + (tdelta.microseconds / 10**6.))
现在的结果是:
>>> s1 = datetime.datetime.now()
>>> s2 = datetime.datetime.now()
>>> delta_to_string(s1 - s2)
'-1 days, 23:59:57.387000'
>>> print (s1 - s2)
-1 day, 23:59:57.387000
>>> delta_to_string(s2 - s1)
'00:00:02.613000'
>>> print (s2 - s1)
0:00:02.613000
>>> delta_to_string(s2 - s2)
'00:00:00.000000'
>>> print (s2 - s2)
0:00:00
与内置 str 功能的行为方式不同......我会将差异留作“读者练习”。