C'è un modo semplice/modulo per corretto misurare il tempo trascorso in python? So che posso semplicemente chiamare lo time.time()
due volte e fare la differenza, ma ciò produrrà risultati errati se l'ora del sistema viene modificata. Certo, ciò non accade molto spesso, ma indica che sto misurando la cosa sbagliata.Misurazione del tempo trascorso in python
Utilizzare time.time()
per misurare le durate è incredibilmente rotonda quando ci pensate. Prendi la differenza tra due misurazioni del tempo assoluto che sono a loro volta costruite da misure di durata (eseguite da timer) e tempi assoluti noti (impostati manualmente o tramite ntp), che non ti interessano affatto.
Quindi, c'è un modo per interrogare direttamente questo "tempo del timer"? Immagino che possa essere rappresentato come un valore millisecondo o microsecondo che non ha una rappresentazione assoluta significativa (e quindi non ha bisogno di essere regolato con il tempo di sistema). Guardando un po 'sembra che questo sia esattamente ciò che fa System.nanoTime()
in Java, ma non ho trovato una funzione Python corrispondente, anche se (hardware-tecnicamente) dovrebbe essere più facile da fornire rispetto a time.time()
.
Modifica: Per evitare confusione e risolvere le risposte di seguito: Non si tratta di modifiche all'ora legale e non voglio nemmeno il tempo di CPU: voglio il tempo fisico trascorso. Non ha bisogno di essere a grana fine e nemmeno particolarmente accurato. Semplicemente non dovrebbe darmi durate negative o durate diverse di diversi ordini di grandezza (oltre la granularità), solo perché qualcuno ha deciso di impostare l'orologio di sistema su un valore diverso. Ecco ciò che i documenti dicono di Python 'time.time()':
Questo è esattamente quello che voglio evitare, dal momento che può portare a cose strane come valori negativi nei calcoli di tempo. Posso aggirare il problema al momento, ma credo sia una buona idea imparare a utilizzare le soluzioni appropriate laddove possibile, dal momento che i kludges torneranno a morderti un giorno.
Edit2: Alcune ricerche mostrano che è possibile ottenere una misurazione indipendente dall'orario del sistema come si desidera in Windows utilizzando GetTickCount64(), in Linux è possibile ottenerlo nel valore restituito di times(). Tuttavia, non riesco ancora a trovare un modulo che fornisca questa funzionalità in Python.
Se si desidera eseguire il benchmark di qualcosa, è necessario utilizzare 'timeit'. – delnan
correlati: [Come ottengo durata temporale monotona in python?] (Http://stackoverflow.com/questions/1205722/how-do-i-get-monotonic-time-durations-in-python) – jfs