Как прекратить работу функции, если она долго выполняется? Python
Есть библиотечная функция, которая может долго выполняться. Как прекратить ее работу, если она, например, работает дольше 30 секунд?
Ответы (1 шт):
Автор решения: Sergey
→ Ссылка
Мне кажется. что проблема настолько типовая, что имеет смысл сделать декоратор. Нечто вроде:
import signal
import time
def time_break(func):
"""
Декоратор, останавливающий работу декорируемой функции, если её
выполнение, заняло более 10 секунд
"""
def wrapper(*args, **kwargs):
try:
print ("Запускаем тестируемую функцию")
signal.alarm(10)
res = func(*args, **kwargs)
signal.alarm(0)
print ("Нормальное завершение")
return res
except Exception as e:
print(e)
return None
return wrapper
@time_break
def do_work():
"""Функция, которая работает бесконечно"""
j = 0;
while True:
time.sleep(1)
j = j + 1
print(j)
# Тестируем
do_work()