获取在Python计时器滴答(Get timer ticks in Python)

2019-07-23 11:08发布

我只是想时间一段代码。 伪代码是这样的:

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

这个怎么样在Python?

更具体地讲,我怎么滴答数自午夜(或Python的却是组织正时)?

Answer 1:

time模块,有两个定时功能: timeclocktime让你“墙”时,如果这是你关心什么。

然而,蟒蛇文档说clock应该用于标杆。 需要注意的是clock的行为在不同的系统不同:

  • 在MS Windows,它使用Win32函数QueryPerformanceCounter的(),用“通常比一微秒更好的分辨率”。 它没有特殊的意义,它只是一个数字(它开始计算你第一次调用clock在你的进程)。
    # ms windows
    t0= time.clock()
    do_something()
    t= time.clock() - t0 # t is wall seconds elapsed (floating point)
  • 在* nix, clock报告的CPU时间。 现在,这是不同的,并且最有可能你想要的值,因为你的程序未落是请求CPU时间的唯一进程(即使你有没有其他进程,内核使用CPU的时间,然后现在)。 所以,这个数字,其通常是大于壁时间smaller¹ - 基准码时(即了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()time.process_time() perf_counter正在使用由timeit模块。



Answer 2:

你需要的是time()函数从time模块:

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

您可以使用timeit模块更多的选择,虽然。



Answer 3:

下面是我开始使用最近的解决方案:

class Timer:
    def __enter__(self):
        self.begin = now()

    def __exit__(self, type, value, traceback):
        print(format_delta(self.begin, now()))

您可以使用它像这样(你至少需要Python 2.5中):

with Timer():
    do_long_code()

当你的代码完成后,计时器会自动打印出的运行时间。 甜! 如果我想快速板凳东西在Python解释器,这是要走的最简单的方法。

而且这里有一个“现在”和“format_delta”一个样本实现,但随意使用您喜欢的时机和格式化方法。

import datetime

def now():
    return datetime.datetime.now()

# Prints one of the following formats*:
# 1.58 days
# 2.98 hours
# 9.28 minutes # Not actually added yet, oops.
# 5.60 seconds
# 790 milliseconds
# *Except I prefer abbreviated formats, so I print d,h,m,s, or ms. 
def format_delta(start,end):

    # Time in microseconds
    one_day = 86400000000
    one_hour = 3600000000
    one_second = 1000000
    one_millisecond = 1000

    delta = end - start

    build_time_us = delta.microseconds + delta.seconds * one_second + delta.days * one_day

    days = 0
    while build_time_us > one_day:
        build_time_us -= one_day
        days += 1

    if days > 0:
        time_str = "%.2fd" % ( days + build_time_us / float(one_day) )
    else:
        hours = 0
        while build_time_us > one_hour:
            build_time_us -= one_hour
            hours += 1
        if hours > 0:
            time_str = "%.2fh" % ( hours + build_time_us / float(one_hour) )
        else:
            seconds = 0
            while build_time_us > one_second:
                build_time_us -= one_second
                seconds += 1
            if seconds > 0:
                time_str = "%.2fs" % ( seconds + build_time_us / float(one_second) )
            else:
                ms = 0
                while build_time_us > one_millisecond:
                    build_time_us -= one_millisecond
                    ms += 1
                time_str = "%.2fms" % ( ms + build_time_us / float(one_millisecond) )
    return time_str

请让我知道,如果你有一个首选的格式化方法,或者是否有做这一切更简单的方法!



Answer 4:

该时间模块在Python,您可以访问时钟()函数,它在几秒钟内返回时间为浮点。

不同的系统会根据它们的内部时钟设置有不同的精度(每秒蜱),但它通常至少在20milliseconds,并在某些情况下比几微秒更好。

-亚当



Answer 5:

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


Answer 6:

如果你有你想当时许多语句,你可以使用这样的事情:

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太)。

这是一个最小增益,但我认为这是一种方便。



文章来源: Get timer ticks in Python
标签: python timer