使用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()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值