Python实现一个计时器(Timer)

2023-09-28 09:57:20 浏览数 (2)

0. 标题

Python实现一个计时器(Timer)

1. time类

time类是python的内置类,只需要直接import即可:

代码语言:python代码运行次数:0复制
from time import time

我们用time类获取一下当前的时间戳:

代码语言:python代码运行次数:0复制
from time import time

# timestampe
ts = time()

print(ts)
# 1695864961.9690828

ts的整数部分单位是秒,小数部分是毫秒微秒。

这个时间戳被称为unix timestamp,表示的是自从1970年1月1日0时0分0秒到现在流逝的时间,

since January 1st, 1970 at 00:00:00 ETC。

2. 实现一个简单的计时器

先看一个很简单的实现:

代码语言:python代码运行次数:0复制
def foo():
    x = 0
    for i in range(100000):
        x  = i
    return x


from time import time

start_time = time()
foo()
end_time = time()

print("time elapsed: {} secondes".format(start_time))
# time elapsed: 1695865191.565248 secondes

这个实现很简单:

  1. 我们在函数执行前,用start_time记录一下当前的时间戳
  2. 执行foo函数
  3. 执行后,用end_time记录一下结束的时间戳
  4. 用end_time - start_time来计算foo消耗的时间。

这种实现很直观,但是如果很多函数需要用计时器来测试或者记录,就需要重复很多这样的代码,整个代码结构就会变得支离破碎。

接下来,我们用装饰器,实现一个封装,起到方便复用的作用。

3. 装饰器实现一个计时器

装饰器的原理可以参加另一篇文章《Python装饰器(Python Decorator)介绍》

代码语言:python代码运行次数:0复制
from time import time

def time(func):
    def wrapper(*args, **kwargs):
        start_time = time()
        func(*args, **kwargs)
        end_time = time()
        print(f'time taken for {func.__name__}:', end_time-start_time, 'seconds')
    return wrapper

@timethis
def test1():
    for i in range(100000):
        x = 1

@timethis
def test2():
    for i in range(1000000):
        x = 1

@timethis
def test3():
    for i in range(1000000):
        x = 1
    
test1()
test2()
test3()

# time taken for test1: 0.011172771453857422 seconds
# time taken for test2: 0.041152000427246094 seconds
# time taken for test3: 0.029973983764648438 seconds

0 人点赞