【发布时间】:2012-01-26 20:20:21
【问题描述】:
这个装饰器直接取自我在网上找到的一个例子:
class TimedOutExc(Exception):
pass
def timeout(timeout):
def decorate(f):
def handler(signum, frame):
raise TimedOutExc()
def new_f(*args, **kwargs):
old = signal.signal(signal.SIGALRM, handler)
signal.alarm(timeout)
try:
result = f(*args, **kwargs)
except TimedOutExc:
return None
finally:
signal.signal(signal.SIGALRM, old)
signal.alarm(0)
return result
new_f.func_name = f.func_name
return new_f
return decorate
如果 f 函数超时,它会抛出异常。
好吧,它可以工作,但是当我在多处理函数上使用这个装饰器并由于超时而停止时,它不会终止计算中涉及的进程。我该怎么做?
我不想启动异常并停止程序。基本上我想要的是当 f 超时时,让它返回 None 然后终止所涉及的进程。
【问题讨论】:
标签: python timeout multiprocessing signals