使用python的守护线程实现定时退出函数

方法一来自参考文章,
方法二是对参考文章的改进,
使用守护线程,超出时间后主线程就退出


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()

版权声明:本文为MarkAustralia原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。