11.19 计时器-装饰器-守护线程初探

76 阅读1分钟

testTimeout.py

import time

import threading

#  守护线程执行逻辑
def myDaemon():
    time_start = time.time()

    event.clear()
    
    # 不断的计算时间差,如果超时则退出,并终止线程
    while(True):
        time_end = time.time()

        if(event.isSet()):
            break

        
        if(time_end - time_start > 3):
            print("time out")
            break
    

# 计时器装饰器
def timerDecoration(func):
    def wrapTheFunction():

        # 开启一个计时线程
        timer_thread = threading.Thread(target=myDaemon)
        timer_thread.start()
        
        # 执行耗时函数
        func()
        
    return wrapTheFunction
    

@timerDecoration
def consumer():
    time.sleep(2)
    
    event.set()
    
    print("do consumer")
    

# 通过事件来通知,当主线程正常完成时,使得事件为 True 通知守护线程结束
event = threading.Event()

consumer()