我有一个Python命令行程序,需要一段时间才能完成。我想知道完成跑步所需的确切时间。

我看过timeit模块,但它似乎只适用于小代码片段。我想给整个节目计时。


当前回答

要使用metakermit对Python 2.7的更新答案,您需要单调包。

代码如下:

from datetime import timedelta
from monotonic import monotonic

start_time = monotonic()
end_time = monotonic()
print(timedelta(seconds=end_time - start_time))

其他回答

我在很多地方都遇到了同样的问题,所以我创建了一个方便的套装占星术。你可以用pip安装钟表,然后以优雅的方式安装:

from horology import Timing

with Timing(name='Important calculations: '):
    prepare()
    do_your_stuff()
    finish_sth()

将输出:

Important calculations: 12.43 ms

或者更简单(如果你有一个功能):

from horology import timed

@timed
def main():
    ...

将输出:

main: 7.12 h

它负责单位和舍入。它适用于python 3.6或更高版本。

以下代码段以可读的<HH:MM:SS>格式打印经过的时间。

import time
from datetime import timedelta

start_time = time.time()

#
# Perform lots of computations.
#

elapsed_time_secs = time.time() - start_time

msg = "Execution took: %s secs (Wall clock time)" % timedelta(seconds=round(elapsed_time_secs))

print(msg)    

这是保罗·麦奎尔的回答,对我来说很有用。以防有人在运行这个问题时遇到问题。

import atexit
from time import clock

def reduce(function, iterable, initializer=None):
    it = iter(iterable)
    if initializer is None:
        value = next(it)
    else:
        value = initializer
    for element in it:
        value = function(value, element)
    return value

def secondsToStr(t):
    return "%d:%02d:%02d.%03d" % \
        reduce(lambda ll,b : divmod(ll[0],b) + ll[1:],
            [(t*1000,),1000,60,60])

line = "="*40
def log(s, elapsed=None):
    print (line)
    print (secondsToStr(clock()), '-', s)
    if elapsed:
        print ("Elapsed time:", elapsed)
    print (line)

def endlog():
    end = clock()
    elapsed = end-start
    log("End Program", secondsToStr(elapsed))

def now():
    return secondsToStr(clock())

def main():
    start = clock()
    atexit.register(endlog)
    log("Start Program")

导入文件后,从程序中调用timing.main()。

Timeit是Python中的一个类,用于计算小代码块的执行时间。

Default_timer是此类中的一个方法,用于测量墙上时钟计时,而不是CPU执行时间。因此,其他进程执行可能会对此产生干扰。因此,它对小代码块很有用。

代码示例如下:

from timeit import default_timer as timer

start= timer()

# Some logic

end = timer()

print("Time taken:", end-start)

默认情况下,Linux或Unix系统(在macOS上测试)在终端上附带时间命令,您可以使用该命令运行Python脚本,并获取执行运行脚本的真实用户系统时间信息。

然而,默认输出不是很清楚(至少对我来说是这样),默认时间命令甚至不接受任何选项作为参数来格式化输出。这是因为time有两个版本——一个内置在bash中,只提供最小版本,另一个位于/usr/bin/time上。

/usr/bin/time命令接受其他参数,如-al、-h、-p和-o。我最喜欢的是-p,它在新行中显示输出,如下所示:

real 2.18
user 17.92
sys 2.71