Сигнальное событие Python завершается time.sleep () - PullRequest
0 голосов
/ 09 октября 2018

При выполнении приведенного ниже кода, почему time.sleep() завершается, как только поступает сигнал тревоги, вместо продолжения после того, как обработчик сингла завершил с print signum?

import signal, time


def handler (signum, frame):
    print signum


def main ():
    signal.signal(signal.SIGALRM, handler)
    signal.alarm(2)
    time.sleep(10)
    print "End of main"


if __name__ == "__main__":
    main()

1 Ответ

0 голосов
/ 09 октября 2018

sleep() вызывает вызывающий поток в спящий режим до тех пор, пока не истечет количество секунд реального времени, указанное в секундах, или пока не поступит сигнал, который не игнорируется.

Пользовательскую функцию ожидания можно определить какследует:

import datetime
import time
def busy_sleep(seconds):
    start_time = datetime.datetime.now()
    seconds_slept = 0
    while seconds_slept < seconds:
        time.sleep(seconds - seconds_slept)
        seconds_slept = (datetime.datetime.now() - start_time).total_seconds()

Просто позвоните busy_sleep(10) вместо time.sleep(10).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...