设置超时的代码

Spring Lv2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 def set_timeout(seconds, err_msg):
     def decorator(func):
         # 信号机制的回调函数,signal_num即为信号,frame为被信号中断那一时刻的栈帧
         def signal_handler(signal_num, frame):
             raise TimeoutError(f"{err_msg}")
 
         def wrapper(*args, **kwargs):
             signal.signal(signal.SIGALRM, signal_handler)
             # 如果time是非0,这个函数则响应一个SIGALRM信号并在time秒后发送到该进程。
             signal.alarm(seconds)
             try:
                 # 若超时,此时alarm会发送信息激活回调函数signal_handler,从而引发异常终止掉try的代码块
                 result = func(*args, **kwargs)
             finally:
                 # 假如在callback函数未执行的时候,要取消的话,那么可以使用alarm(0)来取消调用该回调函数
                 signal.alarm(0)
                 return result
         return wraps(func)(wrapper)
     return decorator

参考文档

  [1] https://www.jianshu.com/p/77b3f2554853

  • Title: 设置超时的代码
  • Author: Spring
  • Created at : 2023-09-20 10:56:24
  • Updated at : 2023-10-11 13:50:15
  • Link: https://www.tecacc.com//post/set-the-timeout-code-zaobu.html
  • License: This work is licensed under CC BY-NC-SA 4.0.
On this page
设置超时的代码