在Python中获取计时器滴答

时间:2008-10-01 05:24:38

标签: python timer

我只想尝试一段代码。伪代码看起来像:

start = get_ticks()
do_long_code()
print "It took " + (get_ticks() - start) + " seconds."

这在Python中看起来如何?

更具体地说,我如何得到午夜以来的滴答数(或者Python组织那个时间)?

5 个答案:

答案 0 :(得分:34)

time模块中,有两个计时功能:timeclocktime给你“墙”时间,如果这是你关心的。

然而,python docsclock应该用于基准测试。请注意clock在不同的系统中表现不同:

  • 在MS Windows上,它使用Win32函数QueryPerformanceCounter(),“分辨率通常优于微秒”。它没有特殊含义,它只是一个数字(它在你的过程中第一次调用clock时开始计算)。
    # ms windows
    t0= time.clock()
    do_something()
    t= time.clock() - t0 # t is wall seconds elapsed (floating point)
  • on * nix,clock报告CPU时间。现在,这是不同的,并且很可能是您想要的值,因为您的程序几乎不是唯一请求CPU时间的进程(即使您没有其他进程,内核时不时地使用CPU时间)。因此,这个数字通常小于壁时间(即time.time() - t0),在对代码进行基准测试时更有意义:
    # linux
    t0= time.clock()
    do_something()
    t= time.clock() - t0 # t is CPU seconds elapsed (floating point)

除此之外,timeit模块具有Timer类,应该使用最适合可用功能的基准测试。

¹除非线程妨碍......

²Python≥3.3:有time.perf_counter() and time.process_time()perf_counter模块正在使用timeit

答案 1 :(得分:31)

您需要的是来自time()模块的time函数:

import time
start = time.time()
do_long_code()
print "it took", time.time() - start, "seconds."

您可以使用timeit模块获取更多选项。

答案 2 :(得分:2)

import datetime

start = datetime.datetime.now()
do_long_code()
finish = datetime.datetime.now()
delta = finish - start
print delta.seconds

从午夜开始:

import datetime

midnight = datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
now = datetime.datetime.now()
delta = now - midnight
print delta.seconds

答案 3 :(得分:2)

python中的time module使您可以访问clock()函数,该函数以秒为单位返回时间作为浮点。

不同的系统将根据其内部时钟设置(每秒滴答数)具有不同的准确度,但通常至少低于20毫秒,在某些情况下优于几微秒。

- 亚当

答案 4 :(得分:0)

如果您有许多想要时间的陈述,可以使用以下内容:

class Ticker:
    def __init__(self):
        self.t = clock()

    def __call__(self):
        dt = clock() - self.t
        self.t = clock()
        return 1000 * dt

然后你的代码看起来像:

tick = Ticker()
# first command
print('first took {}ms'.format(tick())
# second group of commands
print('second took {}ms'.format(tick())
# third group of commands
print('third took {}ms'.format(tick())

这样您就不需要在每个块之前键入t = time()并在其之后键入1000 * (time() - t),同时仍然可以控制格式化(尽管您也可以轻松地将其放在Ticket中)

这是一个微不足道的收获,但我认为这很方便。