У меня есть этот декоратор, взятый непосредственно из примера, который я нашел в сети:
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, а затем завершал соответствующие процессы.