Python速度测试 - 时差 - 毫秒

时间:2009-04-19 23:08:28

标签: python datetime time time-measurement

为了加速测试一段代码,在Python中比较2次的正确方法是什么?我试过阅读API文档。我不确定我理解timedelta的事情。

到目前为止,我有这段代码:

from datetime import datetime

tstart = datetime.now()
print t1

# code to speed test

tend = datetime.now()
print t2
# what am I missing?
# I'd like to print the time diff here

14 个答案:

答案 0 :(得分:159)

datetime.timedelta只是两个日期时间之间的差异...所以它就像一段时间,以天/秒/微秒为单位

>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now()
>>> c = b - a

>>> c
datetime.timedelta(0, 4, 316543)
>>> c.days
0
>>> c.seconds
4
>>> c.microseconds
316543

请注意c.microseconds仅返回timedelta的微秒部分!出于计时目的,请始终使用c.total_seconds()

您可以使用datetime.timedelta进行各种数学运算,例如:

>>> c / 10
datetime.timedelta(0, 0, 431654)

查看CPU时间而不是挂钟时间可能更有用...虽然操作系统依赖于...在类Unix系统下,请查看'time'命令。

答案 1 :(得分:45)

从Python 2.7开始,有timedelta.total_seconds()方法。所以,要获得经过的毫秒:

>>> import datetime
>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now()
>>> delta = b - a
>>> print delta
0:00:05.077263
>>> int(delta.total_seconds() * 1000) # milliseconds
5077

答案 2 :(得分:35)

您可能希望改为使用the timeit module

答案 3 :(得分:19)

你也可以使用:

import time

start = time.clock()
do_something()
end = time.clock()
print "%.2gs" % (end-start)

或者您可以使用python profilers

答案 4 :(得分:12)

我知道这已经很晚了,但我真的很喜欢使用:

import time
start = time.time()

##### your timed code here ... #####

print "Process time: " + (time.time() - start)

time.time()从纪元开始为你提供秒数。因为这是以秒为单位的标准化时间,您可以简单地从结束时间中减去开始时间以获得处理时间(以秒为单位)。 time.clock()适用于基准测试,但如果您想知道您的过程需要多长时间,我发现它没用。例如,它更直观地说'#34;我的过程需要10秒钟"而不是说"我的过程需要10个处理器时钟单位"

>>> start = time.time(); sum([each**8.3 for each in range(1,100000)]) ; print (time.time() - start)
3.4001404476250935e+45
0.0637760162354
>>> start = time.clock(); sum([each**8.3 for each in range(1,100000)]) ; print (time.clock() - start)
3.4001404476250935e+45
0.05

在上面的第一个例子中,time.clock()显示时间为0.05,time.time显示时间为0.06377()

>>> start = time.clock(); time.sleep(1) ; print "process time: " + (time.clock() - start)
process time: 0.0
>>> start = time.time(); time.sleep(1) ; print "process time: " + (time.time() - start)
process time: 1.00111794472

在第二个例子中,处理器时间以某种方式显示" 0"即使这个过程睡了一秒钟。 time.time()正确显示的时间超过1秒。

答案 5 :(得分:4)

你可以简单地打印出差异:

print tend - tstart

答案 6 :(得分:3)

以下代码应显示时间增量...

from datetime import datetime

tstart = datetime.now()

# code to speed test

tend = datetime.now()
print tend - tstart

答案 7 :(得分:2)

我不是Python程序员,但I do know how to use Google这就是我找到的:你使用“ - ”运算符。要完成您的代码:

from datetime import datetime

tstart = datetime.now()

# code to speed test

tend = datetime.now()
print tend - tstart

此外,看起来你可以使用strftime()函数来格式化时间跨度计算,以便渲染时间然后让你开心。

答案 8 :(得分:2)

time.time()/ datetime适合快速使用,但并不总是100%精确。出于这个原因,我喜欢使用std lib profilers之一(尤其是hotshot)来找出它是什么。

答案 9 :(得分:2)

您可能需要查看profile模块。您可以更好地了解减速的位置,并且您的大部分工作都将完全自动化。

答案 10 :(得分:2)

这是一个模仿Matlab&Octave的tic toc函数的自定义函数。

使用示例:

time_var = time_me(); # get a variable with the current timestamp

... run operation ...

time_me(time_var); # print the time difference (e.g. '5 seconds 821.12314 ms')

功能:

def time_me(*arg):
    if len(arg) != 0: 
        elapsedTime = time.time() - arg[0];
        #print(elapsedTime);
        hours = math.floor(elapsedTime / (60*60))
        elapsedTime = elapsedTime - hours * (60*60);
        minutes = math.floor(elapsedTime / 60)
        elapsedTime = elapsedTime - minutes * (60);
        seconds = math.floor(elapsedTime);
        elapsedTime = elapsedTime - seconds;
        ms = elapsedTime * 1000;
        if(hours != 0):
            print ("%d hours %d minutes %d seconds" % (hours, minutes, seconds)) 
        elif(minutes != 0):
            print ("%d minutes %d seconds" % (minutes, seconds))
        else :
            print ("%d seconds %f ms" % (seconds, ms))
    else:
        #print ('does not exist. here you go.');
        return time.time()

答案 11 :(得分:0)

您可以使用这样的timeit来测试名为module.py

的脚本
$ python -mtimeit -s 'import module'

答案 12 :(得分:0)

箭头:适用于Python的更好的日期和时间

import arrow
start_time = arrow.utcnow()
end_time = arrow.utcnow()
(end_time - start_time).total_seconds()  # senconds
(end_time - start_time).total_seconds() * 1000  # milliseconds

答案 13 :(得分:0)

start = datetime.now() 

#code for which response time need to be measured.

end = datetime.now()
dif = end - start
dif_micro = dif.microseconds # time in microseconds
dif_millis = dif.microseconds / 1000 # time in millisseconds