#python #cygwin #signals #posix
#python #cygwin #сигналы #posix
Вопрос:
Я пытаюсь заставить alarm работать снова и снова.
Мой обработчик
def handler_SIGALRM(signum, frame):
print "waiting"
signal.alarm(2)
Сигнал тревоги срабатывает только один раз, хотя каждый раз, когда я устанавливаю его снова.
В моем коде я также использую sigchld и sys.exit после работы дочернего элемента.
Я запускаю его с помощью cygwin.
РЕДАКТИРОВАТЬ: мне нужно написать код, который будет печатать «ожидание» каждую секунду, с помощью sigalarm, а не циклов
Я идиот, я отредактировал неправильный код
Ответ №1:
Вы поставили свой signal.alarm(2)
в неправильное место. Смотрите мой пример ниже.
import time
import signal
class TimeoutException (Exception):
pass
def signalHandler (signum, frame):
raise TimeoutException ()
timeout_duration = 5
signal.signal (signal.SIGALRM, signalHandler)
for i in range (5):
signal.alarm (timeout_duration)
try:
"""Do something that has a possibility of taking a lot of time
and exceed the timeout_duration"""
time.sleep (20)
except TimeoutException as exc:
print "Notify your program that the timeout_duration has passed"
finally:
#Clean out the alarm
signal.alarm (0)
Комментарии:
1. Мне нужно использовать sigalarm (а не циклы) для записи «ожидания» каждую секунду. Я установил его впервые в основном.
2. Привет. Я идиот. Мой код не работал, потому что я отредактировал другой код