Простой будильник и проверка времени каждую секунду

1

Я создаю будильник на питоне и задаю простой вопрос:

Мое разрешение будильника должно быть ниже второго. В настоящее время у меня есть поток, который просыпается каждые 0,5 секунды и проверяет, не пришло ли время, чтобы начать шуметь.

Моя единственная забота заключается в том, что каким-то образом система становится полностью перегруженной в какой-то момент, и сигнал тревоги не звучит, потому что поток будильника все еще спал во время второго, он должен был проверить время.

Итак, мой вопрос: будет ли проверка каждые 0,05 секунды лучше? Или есть способ зарегистрировать обработчик событий с помощью python в течение определенного времени, поэтому мне не нужно постоянно проверять время.

  • 0
    Не могли бы вы опубликовать код для нас, чтобы узнать, как вы это делаете?
Теги:
scheduler

2 ответа

2
Лучший ответ

Отметьте стандартный signal модуль для функций таймера.

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

  • 0
    Это легко сделать, если нужно проверить только одно событие, если пользователь никогда не меняет время, не останавливает процесс или никогда не переводит систему в спящий режим.
  • 0
    Что ж, если процесс «зависнет», другой вариант тоже не сработает. Ключевое отличие в том, что time.sleep намного эффективнее. Я думаю, что вопрос был ориентирован на обработку одного события, но вы всегда можете отправить несколько событий в несколько потоков.
2

Это не лучшее решение. Это не гарантирует, что вы заблокированы более одной секунды.

Вы должны придерживаться разрешения 0,5 секунды (или, что еще хуже, если жизнь не зависит от него) и запускать событие каждый раз, когда он находится в состоянии или в прошлом, и держать флаг на событие, если оно были уволены. Тогда он будет всегда срабатывать ровно один раз и как можно ближе к целевому времени.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню