Python 速度测试-时间差-毫秒

在 Python 中比较2次以加快测试一段代码的正确方法是什么?我试着读了 API 的文件。我不太明白什么是时间三角洲。

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

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
374629 次浏览

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

print tend - tstart

我不是 Python 程序员,但我是 我知道怎么用谷歌程序员,这是我发现的: 您使用“-”操作符。要完成代码:

from datetime import datetime


tstart = datetime.now()


# code to speed test


tend = datetime.now()
print tend - tstart

此外,您似乎可以使用 strftime ()函数来格式化时间跨度计算,以便呈现让您感到满意的时间。

下面的代码应该显示时间详细..。

from datetime import datetime


tstart = datetime.now()


# code to speed test


tend = datetime.now()
print tend - tstart

Time ()/datetime 适合快速使用,但并不总是100% 精确。出于这个原因,我喜欢使用一个 std lib 侧写师(特别是 hotshot)来查明什么是什么。

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

请注意,c.microseconds只返回时间差的微秒部分! 为了计时的目的,始终使用 c.total_seconds()

你可以用 datetime.timedelta 做各种各样的数学运算,例如:

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

查看 CPU 时间可能比查看壁钟时间更有用... ... 不过这取决于操作系统... ... 在类 Unix 系统下,查看‘ time’命令。

你也可以使用:

import time


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

或者你可以用 Python 分析器

您可能需要查看 侧写模块。您将更好地了解您的速度放慢的位置,并且您的大部分工作将是完全自动化的。

您可能需要改用 时间模块

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

$ python -mtimeit -s 'import module'

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

import time
start = time.time()


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


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

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

在上面的第一个示例中,time.lock ()显示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秒。

自从 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

下面是一个模仿 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()

箭头: 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
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

以防有人需要这样的东西来分析日志条目之间的延迟,例如... ... 等等。

def get_time_diff_between_timestruct_tuples(timestruct_tuples):
"""
expecting input like:
[(0, datetime.datetime(2021, 10, 27, 16, 6, 8, 590892)),
(1, datetime.datetime(2021, 10, 27, 16, 6, 8, 591833)),
(2, datetime.datetime(2021, 10, 27, 16, 6, 9, 434053)),
(3, datetime.datetime(2021, 10, 27, 16, 6, 9, 878021)), ...]
    

output like:
[0.941, 0.84222, 0.443968, ...]
"""
    

def seconds_mms_diff(t0, t1):
diff = t1 - t0
s = diff.seconds
mms = diff.microseconds
return float(f"{s}.{mms}")
    

timediffs = []
init = timestruct_tuples[0][1]
idx = 0
while idx < (len(timestruct_tuples)-1):
timediffs.append(seconds_mms_diff(init, timestruct_tuples[idx+1][1]))
idx += 1
init = timestruct_tuples[idx][1]
return timediffs

您需要改用 time.time(),它以高精度输出 unix 时间。

使用以下代码:

from time import time


tstart = time()
doSomething()
tend = time()
difference = tend - tstart
print("The doSomething function took {} seconds to execute".format(difference))