time.perf_counter(), monotonic(), process_time(), thread_time() în Python

Modulul time Python 3.3+ (variantele _ns: 3.7+)

Ceasuri pentru măsurarea duratelor: timp real, timp de procesor al procesului sau al firului.

Sintaxă
time.perf_counter()
time.monotonic()
time.process_time()
time.thread_time()

Ce face time.perf_counter(), monotonic(), process_time(), thread_time()

perf_counter() este ceasul cu cea mai mare rezoluție, potrivit pentru a măsura cât durează o bucată de cod. monotonic() nu poate merge niciodată înapoi, potrivit pentru termene și timeout-uri. Valorile lor absolute nu au sens; contează doar diferența dintre două citiri.

process_time() măsoară doar timpul de procesor folosit de procesul curent (fără pauzele din sleep), iar thread_time() doar al firului curent. Fiecare are o variantă _ns care returnează nanosecunde ca întreg.

Ce returnează

Un float în secunde (variantele _ns: int în nanosecunde).

Exemple

Exemplul 1: Timp real față de timp de procesor

import time
start_real = time.perf_counter()
start_cpu = time.process_time()
start_ns = time.perf_counter_ns()
time.sleep(0.2)
suma = sum(i * i for i in range(2_000_000))
print(f"real: {time.perf_counter() - start_real:.3f} s")
print(f"procesor: {time.process_time() - start_cpu:.3f} s")
print(f"ns: {time.perf_counter_ns() - start_ns}")
print(time.monotonic() > 0, time.monotonic_ns() > 0, time.thread_time() >= 0, time.thread_time_ns() >= 0)

Rezultat posibil (diferă la fiecare rulare)

real: 0.312 s
procesor: 0.109 s
ns: 312409125
True True True True

Greșeli frecvente

  • Afișezi direct perf_counter() crezând că este ora: valoarea are un punct de pornire nedefinit. Folosește doar diferențe.

Comenzi înrudite