2014-10-15 4 views
0

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

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

Есть ли способ предотвратить это?

from threading import Timer 
def timer(): 
    Timer(1.00, timer).start() 
    STAT['ftime'] = time.strftime("%H:%M:%S") 
+0

является 'Таймер '' threading.Timer'? – mgilson

+0

Да, сорри, я уточню .. – crankshaft

ответ

0
start_time = time.time() 
interval = 1 
for i in range(20): 
    time.sleep(start_time + i*interval - time.time()) 
    # do a thing 

Заменить '20' с тем не менее сколько секунд вы хотите время.

0

Существуют различные подходы к планированию, некоторые проекты могут даже обеспечивать меры для предоставления некоторого приемлемого вида средств для блокированного/неудачного инициирования в запланированном графике планирования - что может помочь более тонкое время/иерархическая синхронизация/внешняя синхронизация/асинхронные операции.

Без получения более подробной информации, был бы плохая практика «рекомендует», но один может получить ispired:

  • если RealTime ограничение позволяет иметь немного больше накладные расходы, один может перейти к " supersampled»эластичные, отказ устойчивых сценариев планирования, с тем, чтобы избежать 2 второго зазора (в случае неудачной одной .Timer() инициации), где threading.Timer() модели пожары каждого 50 мса, и встроенный логик решает, если он в режиме реального времени (не более половины одного интервала планирования с идеализированного второго края) и выполняет ли реальная работа, которая должна была быть запущена, или просто return, в случае, если RTC не «близок» к запланированному идеализированному времени планирования.
  • хороший дизайн питона тоже не может забыть о проблемах с GIL вопросов -Блокировки с избегая blockingIO (ы), с осуществлением разумной задачей сегментации для CPU переплета частей коды
Смежные вопросы