如何在Python中确定处理时间?

60 投票
9 回答
141903 浏览
提问于 2025-04-15 14:32

我刚开始学习Python,对日期和时间的文档有点困惑。我想计算执行某个计算所花费的时间。

在Java中,我会这样写:

long timeBefore = System.currentTimeMillis();
doStuff();
long timeAfter = System.currentTimeMillis();
elapsed time = timeAfter - timeBefore;

我相信在Python中会更简单。有人能帮我吗?

9 个回答

16

你可以实现两个函数,分别叫做 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

你还可以看看:

40

在之前的一些回答基础上(感谢:SilentGhost、nosklo、Ramkumar),我们可以用一个简单的便携式计时器来实现,使用的是 timeit 里的 default_timer()

>>> import timeit
>>> tic=timeit.default_timer()
>>> # Do Stuff
>>> toc=timeit.default_timer()
>>> toc - tic #elapsed time in seconds

这个方法会返回经过的实际时间,而不是CPU的工作时间。正如在timeit 文档中所描述的,它会根据你的操作系统选择最精确的现实世界计时器。

另外,从Python 3.3开始,这个功能也可以通过time.perf_counter性能计数器来实现。在3.3及以上版本中,timeit.default_timer()指的就是这个新的计数器。

如果你需要更精确或更复杂的性能计算,timeit还提供了更高级的功能,可以自动计时小段代码,并计算在设定的重复次数下的平均运行时间。

96

在Python中,相应的写法是:

>>> import time
>>> tic = time.clock()
>>> toc = time.clock()
>>> toc - tic

如果你想找出表现最好的方法,建议你看看timeit这个工具。

撰写回答