#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. Самый элегантный способ — предоставить модуль, который дает вам желаемое время с вашим смещением. Не нужно ничего исправлять, у вас возникнут проблемы. Просто выясните, какие из ваших используемых модулей / функций нуждаются в вашем смещении по времени, и оберните / украсьте их.