我需要独立检查当前时间(顺便提一下,用系统提供的时间进行交叉检查),我想使用NTP协议。
有一个NTP模块(ntplib
),可以查询一个 NTP服务器:
>>> import ntplib
>>> import time
>>> time.ctime(ntplib.NTPClient().request('europe.pool.ntp.org', version=3).tx_time)
'Wed Nov 18 17:17:16 2015'
我想使用NTP功能将来自多个NTP服务器的响应组合起来以获得optimum response:
[NTP协议]使用Marzullo算法的修改版本 选择准确的时间服务器,旨在减轻影响 可变网络延迟。
在Python(理想情况下是3.x)中利用它的正确方法是什么?
答案 0 :(得分:0)
在Python(理想情况下是3.x)中利用它的正确方法是什么?
基本上,您必须在Python中实现Marzullo的算法。
一旦你查询了两台服务器,你将如何确定哪个时钟更接近原子钟呢?
确定“最佳响应”(a.k.a。最准确的时间源)是棘手的事情。
你要找的是NTP implementation
,除非你想在python中自己动手。
维基页面上讨论的NTP协议正在讨论NTP Reference Implementation。这包括在所有服务器上运行的ntp守护程序。 ntp守护程序跟踪远程引用服务器,哪些是活动的,并且是最准确的。然后,Ntp守护进程将您的时钟转换或步进以匹配远程时钟。
也许最简单的方法可以实现您想要的目标,就是在客户端模式下运行服务器上的ntp守护程序(即使用参考实现)。在您的ntp.conf中,列出您尝试用来查找“最佳响应”的所有时间服务器。当你运行ntpd时,守护进程将为你确定最低层,最准确和可用的参考服务器。
您需要做的就是ntpq -p
,时间最准确的远程服务器将是旁边带星号的服务器。
以下是一些示例输出:
remote refid st t when poll reach delay offset jitter
==============================================================================
LOCAL(0) .LOCL. 10 l 96h 64 0 0.000 0.000 0.000
*ns2.example.com 10.193.2.20 2 u 936 1024 377 31.234 3.353 3.096