我是Python的新手,对日期/时间文档感到困惑。我想计算执行某个计算所需的时间。
在Java中,我会这样写:
long timeBefore = System.currentTimeMillis();
doStuff();
long timeAfter = System.currentTimeMillis();
elapsed time = timeAfter - timeBefore;
我相信在Python中这更加容易。有人可以帮忙吗?
我是Python的新手,对日期/时间文档感到困惑。我想计算执行某个计算所需的时间。
在Java中,我会这样写:
long timeBefore = System.currentTimeMillis();
doStuff();
long timeAfter = System.currentTimeMillis();
elapsed time = timeAfter - timeBefore;
我相信在Python中这更加容易。有人可以帮忙吗?
在Python中的等价写法应该是:
>>> import time
>>> tic = time.clock()
>>> toc = time.clock()
>>> toc - tic
如果您正在尝试找到性能最佳的方法,那么您可能应该查看timeit
。
clock
更好。 - SilentGhosttimeit
,但对于我当前的小练习来说,这已经足够了。 - Eric Wilsontime.clock
在所有平台上的行为并不相同。特别是,在Unix上它返回的是处理器时间而不是时钟时间。 - nosklotime.clock()
已被废弃,并自Python 3.7版本开始发出警告。现在推荐使用的函数是time.process_time()
和time.perf_counter()
。请参见https://docs.python.org/3/library/time.html#time.clock。 - user9921382timeit
的 default_timer()
:>>> import timeit
>>> tic=timeit.default_timer()
>>> # Do Stuff
>>> toc=timeit.default_timer()
>>> toc - tic #elapsed time in seconds
这将返回经过的墙钟(实际)时间,而不是CPU时间。正如timeit
文档所描述的那样,它会根据平台选择可用的最精确的真实世界计时器。time.perf_counter
性能计数器获得。在3.3+下,timeit.default_timer()指的是这个新的计数器。timeit
包括更复杂的调用以自动计时小代码片段,包括在一组定义的重复次数中平均运行时间。你可以实现两个函数tic()
和tac()
,其中tic()
记录它被调用的时间,tac()
打印自从tic()
被调用以来的时间差。这是一个简短的实现:
import time
_start_time = time.time()
def tic():
global _start_time
_start_time = time.time()
def tac():
t_sec = round(time.time() - _start_time)
(t_min, t_sec) = divmod(t_sec,60)
(t_hour,t_min) = divmod(t_min,60)
print('Time passed: {}hour:{}min:{}sec'.format(t_hour,t_min,t_sec))
现在你可以在你的代码中使用它:
tic()
do_some_stuff()
tac()
例如,它将输出:
Time passed: 0hour:7min:26sec
对于Python 3.3及更高版本,time.process_time()
非常好用:
import time
t = time.process_time()
#do some stuff
elapsed_time = time.process_time() - t
time.sleep()
时间延迟。我刚试着用 time.sleep()
进行了一分钟的测试,结果有点困惑!例如,如果您想要在精确的时间间隔内重复该过程(如网页爬取),可以测量经过的时间,然后添加适当的 time.sleep()
延迟。 - Will Croxfordprocess_time()
获得0.125作为经过的时间,到结束输入消息的时间,不确定发生了什么,文档提到的time.sleep()延迟被process_time忽略,但填充框肯定是正常的处理时间,需要从selenium发送多个send_keys()调用来完成此操作。 - Will CroxfordDeprecationWarning: time.clock has been deprecated in Python 3.3 and will be removed from Python 3.8: use time.perf_counter or time.process_time instead
import time
def func(x):
time.sleep(5)
return x * x
lst = [1, 2, 3]
tic = time.perf_counter()
print([func(x) for x in lst])
toc = time.perf_counter()
print(toc - tic)
# [1, 4, 9]
# 15.0041916 --> output including 5 seconds sleep time
import time
def func(x):
time.sleep(5)
return x * x
lst = [1, 2, 3]
tic = time.process_time()
print([func(x) for x in lst])
toc = time.process_time()
print(toc - tic)
# [1, 4, 9]
# 0.0 --> output excluding 5 seconds sleep time
如果您需要了解如何确定处理时间的更多信息,以及几种方法的比较(其中一些已经在此帖子的答案中提到) - 特别是以下几点之间的区别:
start = time.time()
相比于现在已经过时的(从3.3版本开始,time.clock()被弃用)
start = time.clock()
请查看Stackoverflow上的另一篇文章:
Python - time.clock() vs. time.time() - accuracy?
如果没有其他更好的方法,这个也可以使用:
start = time.time()
... do something
elapsed = (time.time() - start)
python -m timeit -h
tic()
和toc()
函数。基本用法如下:tic()
''' some code that runs for an interesting amount of time '''
toc()
# OUTPUT:
# Elapsed time is: 32.42123 seconds
time.time()
不是单调的,不能用来测量时间间隔。 - Grieftime.monotonic
,它在Python 3.3+中可用(我现在使用它)。 time.time
不是单调的,因为它依赖于系统时间,而系统时间可能会在运行期间被修改。 - tyleha