您当前的位置: 首页 >  彭世瑜 Python

Python编程:signal处理超时问题

彭世瑜 发布时间:2019-01-14 11:48:12 ,浏览量:5

简单示例

# -*- coding: utf-8 -*-

import signal
import time


def handle(signum, frame):
    print("超时了")


# 注册信号
signal.signal(signal.SIGALRM, handle)

# 设置信号发送时间
signal.alarm(3)  # 开启闹钟信号

print("开启信号")

time.sleep(5)

print("关闭信号")

signal.alarm(0)  # 关闭闹钟信号
"""
sleep 2
开启信号
关闭信号

sleep 5
开启信号
超时了
关闭信号
"""

处理超时示例


import signal

class TimeOutException(Exception):
    pass


def handle(signum, frame):
    raise TimeOutException("运行超时!")


def set_timeout(timeout, callback):
    def wrapper(func):
        def inner(*args, **kwargs):
            try:
                signal.signal(signal.SIGALRM, handle)
                signal.alarm(timeout)  # 开启闹钟信号
                rs = func(*args, **kwargs)
                signal.alarm(0)  # 关闭闹钟信号
                return rs
            except TimeOutException as e:
                callback()

        return inner

    return wrapper


def process_time():
    print("超时了")


@set_timeout(40, process_time)
def function():
	pass
	

备注:超时信号只能设置在主线程函数,不能设置在子线程函数

参考 python 使用 signal模块实现函数调用超时问题

关注
打赏
1688896170
查看更多评论

彭世瑜

暂无认证

  • 5浏览

    0关注

    2727博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0621s