Python|如何安排节目时间
本文旨在展示如何计算执行各种任务所需的时间。
一个简单的解决方案是使用时间模块。该模块包含各种与时间相关的功能。此外,在这些函数上放置一个更高级别的接口并将它们用作秒表也非常有用,如下面的代码中所述 -
代码#1:
Python3
# Using time module
import time
# defining the class
class Timer:
def __init__(self, func = time.perf_counter):
self.elapsed = 0.0
self._func = func
self._start = None
# starting the module
def start(self):
if self._start is not None:
raise RuntimeError('Already started')
self._start = self._func()
# stopping the timer
def stop(self):
if self._start is None:
raise RuntimeError('Not started')
end = self._func()
self.elapsed += end - self._start
self._start = None
# resetting the timer
def reset(self):
self.elapsed = 0.0
@property
def running(self):
return self._start is not None
def __enter__(self):
self.start()
return self
def __exit__(self, *args):
self.stop()
Python3
# using the class Timer()
def countdown(n):
while n > 0:
n -= 1
# Use 1: Explicit start / stop
time = Timer()
# start
time.start()
countdown(1000000)
# stop
time.stop()
print(time.elapsed)
# Use 2: As a context manager
with time:
countdown(1000000)
print(time.elapsed)
with Timer() as t2:
countdown(1000000)
print(t2.elapsed)
Python3
t = Timer(time.process_time)
with t:
countdown(1000000)
print(t.elapsed)
我们可以根据用户的需要使用该类启动、停止或重置此计时器,以便在 elapsed 属性中跟踪总经过时间。为此,它在下面的代码中提到 -
代码#2:
Python3
# using the class Timer()
def countdown(n):
while n > 0:
n -= 1
# Use 1: Explicit start / stop
time = Timer()
# start
time.start()
countdown(1000000)
# stop
time.stop()
print(time.elapsed)
# Use 2: As a context manager
with time:
countdown(1000000)
print(time.elapsed)
with Timer() as t2:
countdown(1000000)
print(t2.elapsed)
- 上面的代码提供了一个非常简单但仍然非常有用的类,用于测量时间和跟踪经过的时间。
它还说明了如何支持上下文管理协议和with语句。 - 在执行时间函数时,底层时间函数是一个问题。由于使用诸如time.time()或time.clock()等函数进行的计时测量的准确性因操作系统而异。
- 相比之下,系统上可用的最高分辨率计时器由time.perf_counter()使用。
为了计算进程使用的 CPU 时间,使用time.process_time()代替,如下面的代码中所述:
代码#3:
Python3
t = Timer(time.process_time)
with t:
countdown(1000000)
print(t.elapsed)
time.perf_counter()和 time.process_time( )都返回一个以秒为单位的“时间”。为了理解结果,调用函数两次并计算时间差,因为时间的实际值没有任何特殊含义。