Python 实现函数执行超时控制的信号量方案
本文介绍在 Python 中利用 signal 模块实现函数执行时间限制的方法。通过注册 SIGALRM 信号及设置闹钟,当函数执行超过指定秒数时触发 RuntimeError 异常并调用回调函数。该方法适用于需要强制终止长时间运行任务的场景,代码示例展示了装饰器模式的封装与使用。
具体实现代码参考以下内容:
# coding=utf-8
import signal
import time
def set_timeout(num, callback):
def wrap(func):
def handle(signum, frame): # 收到信号 SIGALRM 后的回调函数,第一个参数是信号的数字,第二个参数是the interrupted stack frame.
raise RuntimeError
def to_do(*args, **kwargs):
try:
signal.signal(signal.SIGALRM, handle) # 设置信号和回调函数
signal.alarm(num) # 设置 num 秒的闹钟
print 'start alarm signal.'
r = func(*args, **kwargs)
print 'close alarm signal.'
signal.alarm(0) # 关闭闹钟
return r
except RuntimeError as e:
callback()
return to_do
return wrap
if __name__ == '__main__':
def after_timeout(): # 超时后的处理函数
print "do something after timeout."
@set_timeout(2, after_timeout) # 限时 2 秒
def connect(): # 要执行的函数
time.sleep(1) # 函数执行时间,写大于2的值,可测试超时
return 'connect success.'
print connect()
上述内容即为 Python 中限制函数执行时间并自定义实现 timeout 功能的完整示例。希望此方案能为您提供参考,欢迎继续支持本站获取更多信息。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













