Python 实现函数执行超时控制的信号量方案

Mia
Mia
发布时间:2026-10-13 | 6人浏览过
原创

本文介绍在 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 功能的完整示例。希望此方案能为您提供参考,欢迎继续支持本站获取更多信息。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表