Как прекратить работу функции, если она долго выполняется? 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()
→ Ссылка