@weeaboodestroyer

Как сделать так, чтобы цикл не прерывался при срабатывании alarm clock?

Через цикл в коде выполняются какие-либо действия
Хотел реализовать такую логику, что если код выполняется дольше n секунд - цикл переходил к следующий итерации
Но выводится alarm clock и цикл прерывается
Что я делаю не так?
a = 1
for link in result:
    try:
        signal.alarm(5)
        time.sleep(a)
        signal.alarm(0)
        a = a + 1
        print ('выполнено')
    except:
        pass
  • Вопрос задан
  • 46 просмотров
Решения вопроса 1
@weeaboodestroyer Автор вопроса
class TimeoutException(Exception):   
    pass

def timeout_handler(signum, frame):   
    raise TimeoutException

signal.signal(signal.SIGALRM, timeout_handler)

for link in result:
    signal.alarm(10) 
    try:
       ( Выполнение вашей функции)
    except TimeoutException:
        continue # continue the for loop if function A takes more than n second
    else:
        signal.alarm(0)


В итоге данный код продолжает цикл если что-то выполнялось дольше 10 секунд, как я и хотел
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
если код выполняется дольше n секунд

Вынеси выполняемый код в отдельный процесс через multiprocessing, по истечении таймаута либо оставляй процесс "как есть", либо убивай принудительно.
В противном случае ты скорее всего не сможешь принудительно завершить код, который делает неизвестно что, и при этом не оставить программу в непредсказуемом состоянии.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы