2011-01-10 2 views
1

Я создаю будильник в питоне и есть простой вопрос: разрешениеПростого будильник и проверять время каждого второго

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

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

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

+0

Вы могли бы написать нам какой-то код, чтобы узнать, как вы это делаете? –

ответ

2

Проверьте функции signal module на функции таймера.

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

+0

Это легко сделать, если проверяется только одно событие, если пользователь nevers изменяет время, блокирует процесс или никогда не спящий с системы. – BatchyX

+0

Ну, если процесс «зависает», другая альтернатива тоже не сработает. Главное отличие заключается в том, что 'time.sleep' намного эффективнее. Я думаю, что вопрос был ориентирован на обработку одного события, но вы всегда можете отправлять несколько событий с несколькими потоками. – scoffey

2

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^