[英]How to make a pausable timer in python?
我想在 python 中创建一个具有以下功能的计时器:
timer.start()
- 应该启动计时器
timer.pause()
- 应该暂停计时器
timer.resume()
- 应该恢复计时器
timer.get()
- 应该返回当前时间
计时器应该从 0 向上运行。 它用于测量时间,而不是触发回调函数。
所以如果你启动它,它应该开始像 0 1 2 3 这样的秒数,如果你暂停它,它应该是静止的 3,但不会更进一步。 在它恢复之后,它会继续 4 5 6 等等
我怎样才能做到这一点?
计时器的暂停/恢复功能不是重复的,因为我不关心回调。
# mytimer.py
from datetime import datetime
import time
class MyTimer():
"""
timer.start() - should start the timer
timer.pause() - should pause the timer
timer.resume() - should resume the timer
timer.get() - should return the current time
"""
def __init__(self):
print('Initializing timer')
self.timestarted = None
self.timepaused = None
self.paused = False
def start(self):
""" Starts an internal timer by recording the current time """
print("Starting timer")
self.timestarted = datetime.now()
def pause(self):
""" Pauses the timer """
if self.timestarted is None:
raise ValueError("Timer not started")
if self.paused:
raise ValueError("Timer is already paused")
print('Pausing timer')
self.timepaused = datetime.now()
self.paused = True
def resume(self):
""" Resumes the timer by adding the pause time to the start time """
if self.timestarted is None:
raise ValueError("Timer not started")
if not self.paused:
raise ValueError("Timer is not paused")
print('Resuming timer')
pausetime = datetime.now() - self.timepaused
self.timestarted = self.timestarted + pausetime
self.paused = False
def get(self):
""" Returns a timedelta object showing the amount of time
elapsed since the start time, less any pauses """
print('Get timer value')
if self.timestarted is None:
raise ValueError("Timer not started")
if self.paused:
return self.timepaused - self.timestarted
else:
return datetime.now() - self.timestarted
if __name__ == "__main__":
t = MyTimer()
t.start()
print('Waiting 2 seconds'); time.sleep(2)
print(t.get())
print('Waiting 1 second'); time.sleep(1)
t.pause()
print('Waiting 2 seconds [paused]'); time.sleep(2)
print(t.get())
print('Waiting 1 second [paused]'); time.sleep(1)
print(t.get())
print('Waiting 1 second [paused]'); time.sleep(1)
t.resume()
print('Waiting 1 second'); time.sleep(1)
print(t.get())
跑
python mytimer.py
输出
Initializing timer Starting timer Waiting 2 seconds Get timer value 0:00:02.001523 Waiting 1 second Pausing timer Waiting 2 seconds [paused] Get timer value 0:00:03.004724 Waiting 1 second [paused] Get timer value 0:00:03.004724 Waiting 1 second [paused] Resuming timer Waiting 1 second Get timer value 0:00:04.008578
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.