Python library for accurate time from NTP servers with threaded and synchronous modes.
Project description
PyNTP Time
PyNTP Time é uma biblioteca Python leve e robusta para obter o tempo preciso de servidores NTP (Network Time Protocol). Ela oferece uma interface similar à time.time(), retornando timestamps UNIX (float), enquanto gerencia internamente a sincronização, compensação de atraso e atualizações.
Este pacote é um fork e uma refatoração do ntp-time, com o objetivo de modernizar a estrutura do código para uma abordagem orientada a objetos e oferecer maior flexibilidade na configuração.
Funcionalidades Principais
- Orientado a Objetos: Configure e utilize o cliente NTP através de uma instância da classe
NTPTime. - Servidor NTP Configurável: Especifique o servidor NTP desejado ao instanciar o cliente.
- Modos de Operação Flexíveis:
- Threaded (Padrão): Sincronização automática em segundo plano a cada X segundos (configurável), garantindo que chamadas a
now()sejam rápidas e não realizem acesso à rede no momento da chamada. - Síncrono: Realiza a sincronização com o servidor NTP a cada chamada do método
now(). Ideal para casos onde multithreading não é desejado ou para scripts de curta duração que necessitam do tempo mais atualizado possível no momento da consulta.
- Threaded (Padrão): Sincronização automática em segundo plano a cada X segundos (configurável), garantindo que chamadas a
- Compensação de Atraso: Atrasos de comunicação com a Internet são compensados (nota: não há garantia de precisão perfeita).
- Suavização de Tempo: Para evitar problemas com o "tempo andando para trás", as correções são aplicadas gradualmente ao longo de um período configurável (padrão: 10 segundos).
- Backoff Exponencial: Em caso de falha na conexão, novas tentativas ocorrem com um intervalo crescente.
Instalação
pip install pyntp-time
(Nota: Quando o pacote estiver disponível no PyPI. Por enquanto, instale localmente ou via Git.)
Como Usar
Modo Threaded (Padrão)
Neste modo, a sincronização ocorre em uma thread separada em intervalos regulares. O método now() retorna o tempo ajustado com base no último offset calculado, tornando-o muito rápido.
import time
from pyntp import NTPTime
# Instancia o cliente NTP (usará pool.ntp.org por padrão e modo threaded)
ntp_client = NTPTime()
# Aguarde alguns segundos para a primeira sincronização em background (especialmente na primeira execução)
# Em aplicações de longa duração, isso não é um problema.
# Para scripts curtos, considere o modo síncrono ou uma espera inicial.
print("Aguardando a primeira sincronização em background...")
time.sleep(5) # Exemplo de espera, pode variar. Idealmente, a biblioteca deve lidar com isso internamente ou fornecer um status.
print("Tempo NTP (Threaded):")
for _ in range(5):
t = ntp_client.now()
print(f"Timestamp: {t}, Humano: {time.ctime(t)}")
time.sleep(1)
# Você pode configurar o servidor e os intervalos:
# ntp_client_custom = NTPTime(ntp_server_url="time.google.com", adjust_interval=300, merge_time=5)
Modo Síncrono (Não-Threaded)
Neste modo, cada chamada a now() bloqueará a execução para contatar o servidor NTP e obter o offset mais recente. Isso pode introduzir latência, mas garante que o tempo retornado é o mais atualizado possível no momento da chamada.
import time
from pyntp import NTPTime
# Instancia o cliente NTP em modo síncrono
ntp_client_sync = NTPTime(threaded=False, ntp_server_url="time.cloudflare.com")
print("\nTempo NTP (Síncrono):")
# A primeira chamada pode demorar um pouco mais devido à sincronização inicial no construtor.
# As subsequentes também farão I/O de rede.
for i in range(3):
print(f"Chamada {i+1}...")
t_sync = ntp_client_sync.now()
print(f"Timestamp: {t_sync}, Humano: {time.ctime(t_sync)}")
time.sleep(1) # Pequena pausa para observar
Configuração da Instância NTPTime
O construtor da classe NTPTime aceita os seguintes parâmetros:
ntp_server_url (str): URL do servidor NTP a ser utilizado. (Padrão:"pool.ntp.org")adjust_interval (int): Intervalo em segundos para a sincronização automática no modo threaded. (Padrão:60segundos)merge_time (int): Tempo em segundos durante o qual a correção do offset é gradualmente aplicada. (Padrão:10segundos)threaded (bool): SeTrue(padrão), opera em modo threaded. SeFalse, opera em modo síncrono.
Contribuições
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests.
Licença
Este projeto é licenciado sob a Licença MIT. Veja o arquivo LICENSE para mais detalhes.
Agradecimentos
- Este projeto é um fork e uma refatoração do excelente trabalho feito no pacote ntp-time.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyntp-0.1.1.tar.gz.
File metadata
- Download URL: pyntp-0.1.1.tar.gz
- Upload date:
- Size: 6.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
450d0418c81ecefb92a438afc30384115105e6972e8cab151839da33d6661419
|
|
| MD5 |
9e5a1566fa7422967dd9331e638b8cee
|
|
| BLAKE2b-256 |
b647f1b4cd05f044d2dc21801816abd4b464f7b008e857c59611b0e2e54258db
|
File details
Details for the file pyntp-0.1.1-py3-none-any.whl.
File metadata
- Download URL: pyntp-0.1.1-py3-none-any.whl
- Upload date:
- Size: 6.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
895833920fed7dbe6666527afb2f32164647fe9adc73058df9e72828394c4640
|
|
| MD5 |
3a939bbe2d0e415e4e8660e5d7d563fd
|
|
| BLAKE2b-256 |
3bcfc2be5d95a1e12e18eb077bcd6849b7672f80fea73496068f6dd047857027
|