首页 > 编程语言 > 详细

python 超时重试的方法 signal手段

时间:2019-09-28 18:17:06      阅读:188      评论:0      收藏:0      [点我收藏+]
# -*- coding: utf-8 -*-

import random
import signal
import time

from retrying import retry


def retry_when_timeout(retries=3, timeout=2):
    def decor(func):
        def timeout_handle(signum, frame):
            raise RetryTimeOutException("Time out...")

        @retry(stop_max_attempt_number=retries, retry_on_exception=retry_if_timeout)
        def run(*args, **kwargs):
            signal.signal(signal.SIGALRM, timeout_handle)  # 设置信号和回调函数
            signal.alarm(timeout)  # 设置 num 秒的闹钟
            print(‘start alarm signal.‘)
            r = func(*args, **kwargs)
            print(‘close alarm signal.‘)
            signal.alarm(0)  # 关闭闹钟
            return r

        return run

    return decor


class RetryTimeOutException(Exception):
    def __init__(self, *args, **kwargs):
        pass


def retry_if_timeout(exception):
    """Return True if we should retry (in this case when it‘s an IOError), False otherwise"""
    return isinstance(exception, RetryTimeOutException)


@retry_when_timeout(retries=3)
def do_process():
    print("begin request...")
    sleep_time = random.randint(1, 4)
    print("request sleep time: %s." % sleep_time)
    time.sleep(sleep_time)
    print("end request...")
    return True


if __name__ == "__main__":
    do_process()

  不支持 window.

python 超时重试的方法 signal手段

原文:https://www.cnblogs.com/dasheng-maritime/p/11604139.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!