定时器
如果需要使用定时器去触发一些事件,Python中通过线程实现定时器timer,定时器的意思也是:一段时间后调用一个函数。
用法:
import threading
def fun_timer():
print('Hello Timer!')
timer = threading.Timer(1, fun_timer)
timer.start()
注意:必须在定时器执行函数内部重复构造定时器,因为定时器构造后只执行1次,必须循环调用。
拓展:可以使用cancel停止定时器的工作timer.cancel()
import threading
def fun_timer():
print('Hello Timer!')
timer = threading.Timer(1, fun_timer)
timer.start()
timer.sleep(20) # 20秒后关闭
timer.cancel()
本次作业:
"""第一个线程中获取当前时间,判断当前时间3秒之后,触发“事件”对象。
在另一个线程中,作为数学考试结束的判断变量,否则一直处于考试中"""
import datetime
import threading
import time
class time0(threading.Thread): # 定义一个类,继承父类threaing的Thread方法
def __init__(self, name):
super(time0, self).__init__()
self.name = name
def run(self): # 定义运行函数
time3 = time.ctime(time.time()) # 获取当前的时间
while True: # 循环
if event.is_set(): # 如果事件执行,输出 考试结束,事件不执行则输出考试中
print("考试结束%s%s" % (self.name, time3))
else:
print("考试中·······")
class set_event(threading.Thread): # 定义一个类,继承父类threaing的Thread方法
def __init__(self):
super(set_event, self).__init__()
def run(self): # 定义运行函数
time1 = time.time() # 获取当前的事件
while True: # 循环
time2 = time.time() # 获取当前时间
time_minus = (time2 - time1) # 获取时间差
t = int(time_minus) # 强制转换为int型
# print(t)
if t >= 3: # 判断,如果时间差大于3秒,则执行事件
event.set()
# event.clear()
if __name__ == '__main__': # 主方法
event = threading.Event() # 定义事件
time_ = time0("当前时间是") # 实例化对象定义线程传参
set_event_ = set_event() # 实例化对象定义线程
time_.start() # 启动线程
set_event_.start() # 启动线程