Python 实现一个计时器
问题
你想记录程序执行多个任务所花费的时间
解决方案
time模块包含很多函数来执行跟时间有关的函数。尽管如此,通常我们会在此基础之上构造一个更高级的接口来模拟一个计时器。例如:
importtime classTimer: def__init__(self,func=time.perf_counter): self.elapsed=0.0 self._func=func self._start=None defstart(self): ifself._startisnotNone: raiseRuntimeError('Alreadystarted') self._start=self._func() defstop(self): ifself._startisNone: raiseRuntimeError('Notstarted') end=self._func() self.elapsed+=end-self._start self._start=None defreset(self): self.elapsed=0.0 @property defrunning(self): returnself._startisnotNone def__enter__(self): self.start() returnself def__exit__(self,*args): self.stop()
这个类定义了一个可以被用户根据需要启动、停止和重置的计时器。它会在elapsed属性中记录整个消耗时间。下面是一个例子来演示怎样使用它:
defcountdown(n): whilen>0: n-=1 #Use1:Explicitstart/stop t=Timer() t.start() countdown(1000000) t.stop() print(t.elapsed) #Use2:Asacontextmanager witht: countdown(1000000) print(t.elapsed) withTimer()ast2: countdown(1000000) print(t2.elapsed)
讨论
本节提供了一个简单而实用的类来实现时间记录以及耗时计算。同时也是对使用with语句以及上下文管理器协议的一个很好的演示。
在计时中要考虑一个底层的时间函数问题。一般来说,使用time.time()或time.clock()计算的时间精度因操作系统的不同会有所不同。而使用time.perf_counter()函数可以确保使用系统上面最精确的计时器。
上述代码中由Timer类记录的时间是钟表时间,并包含了所有休眠时间。如果你只想计算该进程所花费的CPU时间,应该使用time.process_time()来代替:
t=Timer(time.process_time) witht: countdown(1000000) print(t.elapsed)
time.perf_counter()和time.process_time()都会返回小数形式的秒数时间。实际的时间值没有任何意义,为了得到有意义的结果,你得执行两次函数然后计算它们的差值。
以上就是Python实现一个计时器的详细内容,更多关于Python计时器的资料请关注毛票票其它相关文章!