Получить фактическое время из NTP, безопасное смещение, использовать его во всей программе

#python #offset #ntp

#python #смещение #ntp

Вопрос:

Есть ли хороший способ сообщить python использовать смещение по времени во всей программе?

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

Дальнейшие вызовы time.time() также должны дать мне это смещение и т.д.

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

Установленный клиент ntp часто выходит из строя без уважительной причины, поэтому я не могу ему доверять.

Приведена эта часть сценария мониторинга (который работает нормально):

 import time
import ntplib

_time_offset = 0.0 # this will be filled with the correct time/seconds by ntplib

def getActualTime(pool="pool.ntp.org"):
    """ this queries the ntp for the correct time and returns the results """
    global _time_offset
    if _time_offset != 0.0:
        pass # use cached
    else: 
        _time_offset = ntplib.NTPClient().request(pool).offset
    return float(time.time() _time_offset)

def getActualCtime():
    return time.ctime(getActualTime())

if __name__ == '__main__':
    print getActualTime()
    print getActualCtime()
 

Системное время смещение ntp (это всегда должно быть правильное время):

1403182331.57

Чт, 19 июня, 14:52:11 2014

если я вызову time.time() или time.ctime(), будет возвращена неправильная непроверенная системная дата.

Комментарии:

1. можете ли вы привести пример правильного вывода?

2. извините за отсутствие ясности. Мои функции работают хорошо. Я ищу способ всегда добавлять это смещение по времени к каждому вызову time.time(), даже если time.time() вызывается некоторыми другими модулями, такими как «ведение журнала»

3. @DavidosKrausos Не знает ни одного элегантного способа. Вероятно, требуется какая-то обезьяна, исправляющая функции, которые вы хотите вернуть измененное время. В любом случае, наличие надежного времени во всей системе определенно стоит того, иначе вы будете исправлять слишком много (и неправильных) мест, все еще не имея точного времени. Я видел подобные попытки в своей практике, и я был очень рад удалить эти изменения из своего кода и полагаться только на то, что система сообщает мне.

4. Ян Влчинский я полностью согласен с вашей точкой зрения здесь. Но мне не разрешено (политика ..) изменять установленный клиент ntp. Одна из причин, по которой необходим этот мониторинг, заключается в том, что установленный клиент ntp иногда изменяет дату на будущее, и мне нужен способ получать уведомления, когда это происходит.

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