为了加速测试一段代码,在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
答案 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