Nano Hash - криптовалюты, майнинг, программирование

Как сократить время сервера ntp до миллисекундной точности с помощью Python ntplib?

Я создаю модуль Python, который будет выводить время с выбранных серверов пула NTP с точностью до миллисекунды, чтобы показать, как меняются временные метки сервера. До сих пор мне удавалось распечатать временную метку исходного сервера с точностью до секунды, но как я могу получить точность в миллисекундах?

ntp_pool = '0.pool.ntp.org', \
       'uk.pool.ntp.org', \
       'ie.pool.ntp.org'

def get_ntp_time():
    for item in ntp_pool:
        call = ntplib.NTPClient()
        response = call.request(item, version=3)
        print(time.ctime(response.orig_time))
06.07.2015


Ответы:


1

Цикл for, скорее всего, исказит ваши результаты, поскольку в каждой итерации проходит время.

В любом случае ответ ntp представляет собой отметку времени с точностью до микросекунды, поэтому ограничение, по-видимому, находится в пределах time.ctime, что соответствует только второй точности

Вместо этого вы можете использовать datetime.fromtimestamp и, при желании, также strftime для сделать его красивее. Мой пример нерешительно имитирует вывод вашего существующего кода.

from datetime import datetime

def get_ntp_time():
for item in ntp_pool:
    call = ntplib.NTPClient()
    response = call.request(item, version=3)
    t = datetime.fromtimestamp(response.orig_time)
    print(t.strftime("%a %b %d %H:%M:%S.%f"))
06.07.2015

2

Я думаю, что здесь что-то вводит в заблуждение: response.orig_time — это время клиента, сделавшего запрос, а не сервера. См. IETF RFC5905, стр. 23: "Временная метка источника (org): время на клиенте, когда запрос улетел на сервер [...]». Актуальная версия кода должна выглядеть примерно так

import ntplib
from datetime import datetime, timezone

NTP_SERVERS = ['0.pool.ntp.org', 'uk.pool.ntp.org']

for server in NTP_SERVERS:
    client = ntplib.NTPClient()
    response = client.request(server, version=3)
    print(f"server: {server}")
    print(f"client time of request: {datetime.fromtimestamp(response.orig_time, timezone.utc)}")
    print(f"server responded with: {datetime.fromtimestamp(response.tx_time, timezone.utc)}")

... дал бы мне, например.

server: 0.pool.ntp.org
client time of request: 2019-12-18 13:58:52.224058+00:00
server responded with: 2019-12-18 13:58:51.289734+00:00
server: uk.pool.ntp.org
client time of request: 2019-12-18 13:58:52.314615+00:00
server responded with: 2019-12-18 13:58:51.377655+00:00

Обратите внимание, что в зависимости от того, как далеко должен пройти сигнал, задержка прохождения туда и обратно (response.delay) может быть значительной, если вы ищете миллисекунды.

18.12.2019
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..