0

我试图在某些代码的性能测试中获得两次之间的差异。首先,我获取环境的本地时间,运行代码进行性能测试,然后再次获取本地时间。之后,我减去时间,看看测试花了多长时间。我试图精确到分钟、秒和微秒。
我发现有趣的是,如果我每次得到时间后都设置一个打印,这很有效:

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吗?

4

2 回答 2

1

This does not directly answer your question, but you could have a look at Pythons timeit module http://docs.python.org/2/library/timeit.html which is for performance testing of small code snippets.

于 2014-02-12T04:56:32.483 回答
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.))

格式表示浮点数总共 9 位,%09.6f包括小数,必要时添加前导 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函数的行为方式不同......我将把这些差异作为“读者练习”。

于 2014-02-12T05:19:48.510 回答