Python. La misura del tempo

Per avere dei riferimenti temporali in Python si usa il modulo time.

Tra le funzioni messe a disposizione dal modulo time ci sono: time(), monotonic(), perf_counter(). Queste funzioni non fanno nient'altro che richiamare funzioni proprie del sistema operativo su cui ci troviamo. Per avere informazioni basta usare il comando get_clock_info(), passando come argomento il nome (stringa) della funzione tempo di cui si vogliono le informazioni: 'time', 'monotonic', 'perf_counter'. Facciamo un esempio su Windows 7:

import time
time.get_clock_info('time')

>>> namespace(adjustable=True, implementation='GetSystemTimeAsFileTime()', monotonic=False, resolution=0.015600099999999999)

Le informazioni che vengono restituite sono, in ordine: l'orologio può essere cambiato dall'esterno, infatti time() non fa altro che leggere la data e l'orario di sistema; la funzione del sistema operativo richiamata da time() è GetSystemTimeAsFileTime(); l'orologio non è monotonico, cioè può anche tornare indietro (immaginate l'ora legale o un aggiornamento automatico dell'orario del vostro PC); infine la risoluzione, 0.0156 secondi, cioè ogni quanto viene aggiornato questo orologio.

time.time()
In Windows usa la funzione GetSystemTimeAsFileTime. 
Risoluzione 1-15 ms, accuratezza e drift "buoni"
Sotto Linux...
In pratica è l'orologio di sistema. Soggetto a cambiamenti.

time.monotonic()
In Windows usa la funzione GetTickCount64. Se si usa XP o inferiore, dopo 49 giorni si resetta.
Risoluzione 15 ms, accuratezza e drift "buoni"
Sotto Linux...
Non soggetto a cambiamenti. Contano solo le differenze.

time.perf_counter()
In Windows usa la funzione QueryPerformanceCounter.
Risoluzione 1 us circa, accuratezza "ottima", drift "scarso": può essere usata solo per "brevi" intervalli di tempo
Sotto Linux...
Non soggetto a cambiamenti. Contano solo le differenze.

L'ora del bios (RTC, basata su un oscillatore al quarzo) può essere letta ma non viene
praticamente mai usata perché è la meno precisa (1 secondo) e accurata (alto drift).
Il sistema operativo legge l'ora del bios all'avvio ma poi ha dei metodi propri e molto più accurati
per mantenere lo scorrere del tempo corretto (tipicamente si basa sul clock della CPU).

Ecco i riferimenti:
https://docs.python.org/3.4/library/time.html
https://www.python.org/dev/peps/pep-0418
http://www.luxford.com/high-performance-windows-timers