方法一来自参考文章, 方法二是对参考文章的改进, 使用守护线程,超出时间后主线程就退出 import time import eventlet # eventlet在python3下可用 import threading from threading import Thread ''' 参考:https://blog.csdn.net/dcrmg/article/details/82850457 ''' # 方法一 def time_limt_demo(): eventlet.monkey_patch() time_limit = 3 # set timeout time 3s with eventlet.Timeout(time_limit, False): time.sleep(60) print('error') print('over') # 方法二:使用装饰器 def Time_limit(**kwargs): timeout = kwargs["timeout"] def decorator(func): def decortor2(*args, **kwargs): class time_thread(Thread): def __init__(self): Thread.__init__(self) self.setDaemon(True) # 设置为守护线程 def run(self): func(*args,**kwargs) t = time_thread() t.start() t.join(timeout) return decortor2 return decorator @Time_limit(timeout=1) def test(): print("Working...") print("Test current thread name:", threading.current_thread().getName()) time.sleep(6) print("Done!") if __name__ == "__main__": # time_limt_demo() print("Main current thread name:", threading.current_thread().getName()) test()
使用python的守护线程实现定时退出函数
最新推荐文章于 2023-08-24 11:02:48 发布