Bud*_*Joe 122 python time datetime 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
Run Code Online (Sandbox Code Playgroud)
Nic*_*oic 177
datetime.timedelta 只是两个日期时间之间的差异...所以它就像一段时间,以天/秒/微秒为单位
>>> import datetime
>>> 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
Run Code Online (Sandbox Code Playgroud)
请注意,c.microseconds只返回timedelta的微秒部分!为了计时目的总是使用c.total_seconds().
你可以用datetime.timedelta做各种数学,例如:
>>> c / 10
datetime.timedelta(0, 0, 431654)
Run Code Online (Sandbox Code Playgroud)
查看CPU时间而不是挂钟时间可能更有用...虽然操作系统依赖于...在类Unix系统下,请查看'time'命令.
f.c*_*ani 55
从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
Run Code Online (Sandbox Code Playgroud)
Zit*_*rax 19
你也可以使用:
import time
start = time.clock()
do_something()
end = time.clock()
print "%.2gs" % (end-start)
Run Code Online (Sandbox Code Playgroud)
或者你可以使用python profilers.
mgo*_*ser 14
我知道这已经晚了,但我真的很喜欢使用:
import time
start = time.time()
##### your timed code here ... #####
print "Process time: " + (time.time() - start)
Run Code Online (Sandbox Code Playgroud)
time.time()从纪元开始给你几秒钟.因为这是以秒为单位的标准化时间,您可以简单地从结束时间中减去开始时间以获得处理时间(以秒为单位).time.clock()对于基准测试很有用,但是如果你想知道你的过程需要多长时间,我发现它没什么用处.例如,说"我的过程需要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
Run Code Online (Sandbox Code Playgroud)
在上面的第一个例子中,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
Run Code Online (Sandbox Code Playgroud)
在第二个例子中,即使进程睡了一秒钟,处理器时间也会以某种方式显示"0".time.time()正确显示1秒多一点.
以下代码应显示时间详细信息...
from datetime import datetime
tstart = datetime.now()
# code to speed test
tend = datetime.now()
print tend - tstart
Run Code Online (Sandbox Code Playgroud)