Python速度测试 - 时差 - 毫秒

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'命令.

  • [timeit 模块页面](http://docs.python.org/library/timeit.html) 说该模块“避免了许多用于测量执行时间的常见陷阱”。这种方法(使用 datetime.now)是否存在任何这些陷阱? (2认同)

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)

  • @Buffalo - 这是准确的 (3认同)
  • 实际上,如果执行时间低于 1 秒,这将不起作用。delta.total_seconds() 返回 0,因此,您无法测量毫秒 (2认同)

Dar*_*con 36

您可能希望使用timeit模块.


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.

  • 当使用“start = time.clock()”时,它会打印“DeprecationWarning: time.clock has been deprecated in Python 3.3 and will be returned from Python 3.8: use time.perf_counter or time.process_time instead”。 (3认同)

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秒多一点.


kil*_*971 5

以下代码应显示时间详细信息...

from datetime import datetime

tstart = datetime.now()

# code to speed test

tend = datetime.now()
print tend - tstart
Run Code Online (Sandbox Code Playgroud)