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

Eri*_*son 38 python datetime

我是Python的新手,并且对日期/时间文档感到困惑.我想计算执行计算所需的时间.

在java中,我会写:

long timeBefore = System.currentTimeMillis();
doStuff();
long timeAfter = System.currentTimeMillis();
elapsed time = timeAfter - timeBefore;
Run Code Online (Sandbox Code Playgroud)

我确信它在Python中更容易.有人可以帮忙吗?

Sil*_*ost 62

python中的等价物是:

>>> import time
>>> tic = time.clock()
>>> toc = time.clock()
>>> toc - tic
Run Code Online (Sandbox Code Playgroud)

目前尚不清楚你想要做什么呢?你想找到效果最好的方法吗?然后你应该看看timeit.

  • 请注意,`time.clock`在所有平台上都不会这样做.更值得注意的是,在unix上它返回处理器时间,而不是时钟时间. (6认同)
  • `time.clock()`自Python 3.3以来不推荐使用,并且自Python 3.7起打印出警告.推荐的函数现在是`time.process_time()`和`time.perf_counter()`.请参阅https://docs.python.org/3/library/time.html#time.clock (5认同)

Bry*_*n P 26

建立并更新一些早期的响应(谢谢:SilentGhost,nosklo,Ramkumar)一个简单的便携式计时器将使用timeit's default_timer():

>>> import timeit
>>> tic=timeit.default_timer()
>>> # Do Stuff
>>> toc=timeit.default_timer()
>>> toc - tic #elapsed time in seconds
Run Code Online (Sandbox Code Playgroud)

这将返回经过的挂钟(实际)时间,而不是CPU时间.并且如timeit文档中所述,根据平台选择最精确的可用实际计时器.

另外,从Python 3.3开始,time.perf_counter性能计数器也提供了相同的功能.在3.3+以下timeit.default_timer()引用这个新计数器.

对于更精确/复杂的性能计算,timeit包括更复杂的调用,用于自动计时小代码片段,包括在一组定义的重复上平均运行时间.


小智 8

您可以实现两个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))
Run Code Online (Sandbox Code Playgroud)

现在在您的代码中,您可以将其用作:

tic()
do_some_stuff()
tac()
Run Code Online (Sandbox Code Playgroud)

它会,例如,输出:

Time passed: 0hour:7min:26sec
Run Code Online (Sandbox Code Playgroud)

也可以看看:

  • 他可能是法国人:) (4认同)
  • 是不是tic / toc?:-) (2认同)

Mic*_*ner 7

对于Python 3.3及更高版本time.process_time()非常好:

import time

t = time.process_time()
#do some stuff
elapsed_time = time.process_time() - t
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这会忽略代码中的任何 `time.sleep()` 时间延迟,我只是尝试用 `time.sleep()` 对其进行测试一分钟,结果很困惑!例如,如果你想以精确的时间间隔重复这个过程,比如 webscraping,可以测量 elapsed_time 然后添加适当的 `time.sleep()` 延迟 (4认同)