两次之间的差异

时间:2014-02-12 04:49:43

标签: python datetime python-2.7 localtime

我试图在两次代码之间进行性能测试。首先,我获取环境的本地时间,运行代码进行性能测试,然后再次获取当地时间。之后,我减去时间,看看测试花了多长时间。我想要精确到几分钟,几秒和几微秒 我觉得有趣的是,如果我在每次抽出时间之后设置打印,这都有效:

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格式打印出来?

2 个答案:

答案 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 功能的行为方式不同......我会将差异留作“读者练习”。