Python ha migliaia di moduli e librerie per soddisfare le esigenze del codificatore. Tuttavia, per renderli utili, devi prima capirli e poi applicarli. Senza la conoscenza preliminare di determinati moduli, è incerto cosa si vuole fare e cosa fa effettivamente il modulo. Il tempo è uno dei fattori importanti nei problemi di codifica. Tutti i codici hanno lo scopo di ridurre il lavoro umano utilizzando i loro potenti algoritmi. La gestione del tempo crea un grande impatto sull’analisi delle prestazioni del codice. Ecco perché oggi impareremo in modo approfondito su come funziona il timer in Python.
Python Timer è una classe / libreria per gestire la complessità temporale del codice. Utilizzando più moduli temporali, è possibile creare un sistema nel codice per controllare il tempo impiegato dal rispettivo frammento di codice. Ci sono diversi tipi di implementazioni timer in python in base alle esigenze degli utenti, vale a dire, funzione python timer (per controllare il tempo di esecuzione dello script), python threading timer (per controllare il tempo impiegato da un thread per finire), python countdown timer (creare un conto alla rovescia) e base python time module (per aiutare con altre attività).
Tutte queste funzioni di implementazione timer in modo diverso e si concentra sulla fornitura di uso diverso per l’utente finale. In questo post, andremo attraverso ogni implementazione timer in dettaglio. È possibile utilizzare il Sommario per passare alla rispettiva implementazione del timer Python.
Catalogo
- Funzioni di base del timer Python
- Tempo di funzione.time
- Tempo di funzione.Thread_time
- Tempo di funzione.Process_time
- Tempo di funzione.Perf_counter
- Tempo di funzione.monotonic
- Classi timer Python personalizzate
- Python Timer using Threading
- Sintassi della classe Timer in Python
- Parametri-
- Tipo di ritorno –
- Metodi nella classe Timer
- Creazione di un oggetto Timer
- Conto alla rovescia in python
- Utilizzando il modulo tempo
- Utilizzo della classe Timer python
- I timer Python come gestori di contesto
- Python Timer Decorators
- Python Timer Cooldown
- Altri moduli timer Python
- Deve leggere:
- Conclusione
Funzioni di base del timer Python
Il modulo più importante in python per quanto riguarda il tempo è il tempo. Questo modulo contiene tutte le funzioni di base per controllare il tempo e analizzarlo. Questa analisi ti aiuterà a capire le prestazioni del tuo codice e la sua efficienza. Esamineremo ciascuna delle funzioni importanti di questo modulo insieme ai suoi esempi.
Di seguito sono riportate le funzioni di base del timer Python utilizzando il modulo time–
- tempo.tempo ()
- tempo.thread_time ()
- tempo.process_time ()
- tempo.perf_counter ()
- tempo.monotono()
Tempo di funzione.time
time.time()
restituisce il tempo in secondi (float) dopo l’epoca. Generalmente, l’epoca è impostata a gennaio 1, 1970, 00:00:00 (UTC), e il numero di secondi dopo questa epoca viene restituito. Questa funzione dipende dal tempo del computer per calcolare il numero di secondi. Se si modifica il tempo del computer tra l’esecuzione di Python, è possibile ottenere numeri strani utilizzando questa funzione.
Esempio–
import timestart = time.time() #start timefor i in range(1000000): passend = time.time()print("Elapsed time is {}".format(end-start))
Spiegazione –
In primo luogo, iniziamo con l’importazione del modulo temporale. Questo modulo contiene tutte le funzioni temporali di base che useremo in questa sezione. All’inizio del codice, dichiareremo la variabile start come time.time()
. Questo memorizzerà l’ora corrente della CPU in numero float dall’epoca. Useremo questa variabile start come punto di riferimento per misurare il tempo. La parte successiva contiene tutti i codici che si desidera utilizzare(In questo esempio, abbiamo usato un for loop). Allo stesso modo, registrare l’ora di fine della CPU (ora predefinita) e controllare il tempo di esecuzione totale utilizzando end – start.
Questo stamperà il tempo impiegato dal codice in secondi. Con l’uso di questa tecnica, puoi controllare il tempo impiegato dal tuo codice. L’unico problema con questo metodo è che il tempo della CPU può essere modificato mentre il codice è in esecuzione. Ciò si tradurrà in un comportamento problematico in python timer.
Tempo di funzione.Thread_time
time.thread_time()
restituisce la somma del tempo di sistema e CPU (float) nel thread corrente in esecuzione. Inoltre, non include il tempo trascorso nella funzione time.sleep()
. Poiché la funzione è specifica del thread, è possibile utilizzare questa funzione per registrare le differenze temporali purché i riferimenti temporali appartengano allo stesso thread.
Esempio–
import timeimport threadingend = Nonestart = Nonedef hello(): global start, end start = time.thread_time() x = 0 while x < 10000000: pass x += 1 end = time.thread_time()t = threading.Thread(target = hello, args = ())t.start() t.join()print("The time spent is {}".format(end - start))
Spiegazione –
Poiché thread_time restituisce il tempo specifico del thread, dobbiamo assicurarci di utilizzare i riferimenti nello stesso thread. A questo scopo, abbiamo istanziato il thread della funzione ‘hello’ e calcolato il tempo impiegato dal thread al suo interno. Tuttavia, assicurati di non poter ottenere l’ora corrente chiamando thread_time() perché restituisce un valore frazionario. Ma puoi sicuramente verificare la differenza tra due riferimenti consecutivi purché appartengano allo stesso thread.
Tempo di funzione.Process_time
time.process_time()
restituisce il riferimento temporale in secondi frazionari (float) della somma del tempo di sistema e del tempo di CPU dell’avanzamento corrente. Come thread_time, questa funzione non misura il tempo trascorso nella funzione time.sleep()
. Inoltre, questa funzione crea un riferimento basato sul processo. Di conseguenza, solo la differenza di tempo tra due riferimenti consecutivi avrà senso.
Esempio–
from time import process_time, sleepiterations = 100000start = process_time() for i in range(iterations): print(i, end=" ") # Stop the stopwatch / counter end = process_time()print(end, start)print("Elapsed time in seconds:", end-start)
Spiegazione –
Iniziamo con l’importazione della funzione process_time e registriamo l’ora di inizio e di fine tra il codice. L’unica differenza tra legacy time.time()
e time.proces_time()
è che il tempo di elaborazione registra i riferimenti temporali del processo corrente, mentre time()
registra il tempo assoluto del sistema.
Tempo di funzione.Perf_counter
Perf Counter sta per Contatore delle prestazioni. Questa funzione restituisce il valore ad alta risoluzione del tempo, che è valido per un breve periodo di tempo. Questa funzione viene utilizzata per ottenere il conteggio preciso del tempo tra due riferimenti. Poiché altre funzioni del timer python non includono il tempo di sospensione, anche perf_counter
non lo include. Passiamo ad un esempio –
Esempio–
from time import perf_counter, sleep # integer input from user, 2 input in single linen = 3 # Start the stopwatch / counter start = perf_counter() for i in range(n): sleep(1)end = perf_counter() print("Elapsed time in seconds:", end-start)
Spiegazione –
È possibile utilizzare il contatore perf allo stesso modo del timer di processo o del timer del thread. L’unica differenza è che il contatore perf restituirà un valore preciso elevato del tempo trascorso. Ma assicurati di usarlo tra piccoli processi, poiché utilizza un’alta precisione. Abbiamo usato un semplice ciclo per controllare il tempo impiegato da esso.
Tempo di funzione.monotonic
Monotonic è un timer python che non può andare indietro. Quando si esegue uno script python, il tempo può essere modificato dall’utente e può fare una grande differenza nell’implementazione del timer in python. Ma il timer monotonico assicura che i riferimenti temporali si adattino alle modifiche esterne.
Esempio–
from time import monotonic, sleep # integer input from user, 2 input in single linen = 3 # Start the stopwatch / counter start = monotonic() for i in range(n): sleep(1)end = monotonic() print("Elapsed time in seconds:", end-start)
Spiegazione –
Importiamo prima la funzione monotonica dal modulo temporale. Quindi creare due riferimenti denominati start e end nella parte superiore e inferiore del codice. Questo misurerà il tempo tra i due riferimenti ed eviterà tutte le modifiche esterne ai tempi del sistema.
Classi timer Python personalizzate
Puoi creare la tua classe Timer personalizzata per fare le cose in base alle tue necessità. Un vantaggio principale della creazione di una classe personalizzata è che puoi gestire tutto il tempo in una singola riga. Non è necessario importare la classe time ogni volta e registrare i riferimenti. Inoltre, puoi scaricare i tuoi dati e registrare tutte le esecuzioni del tempo passato per scegliere l’algoritmo migliore per te.
Questa sezione creerà una classe personalizzata per gestire l’ora e registrare tutte le differenze temporali nei codici. Tuffiamoci a destra in esso –
Timer.py–
Inizieremo con l’importazione del modulo orario. Quindi inizializzare la classe Timer python e iniziare a definire gli attributi e i metodi. Finora, abbiamo incluso solo l’attributo di base per mantenere un riferimento iniziale della classe. Per renderlo più complesso, è possibile creare più attributi. Finora, ci sono tre metodi elencati di seguito–
- start – (Opzionale) Per avviare il timer.
- log-Per registrare il tempo trascorso corrente relativo all’ora di inizio.
- milestone-Per ripristinare il timer e iniziare il suo conteggio da 0.
import timeclass Timer: def __init__(self): self.start = time.time() def start(self): self.start = time.time() def log(self): logger = time.time() - self.start print('Time log -',logger) def milestone(self): self.start = time.time()
example.py –
Esempi di utilizzo della classe di cui sopra sono riportati di seguito. Come puoi vedere, puoi mantenere pulito il tuo codice creando una classe Timer personalizzata e aumentare la flessibilità.
import timertime = timer.Timer()for i in range(1000000):passp = 1time.log()for i in range(1000000):passp = 1time.log()
Uscita–
Time log - 0.054854631423950195Time log - 0.10871052742004395
Python Timer using Threading
Quando vogliamo eseguire alcune operazioni o vogliamo che la nostra funzione venga eseguita dopo un certo periodo di tempo, facciamo uso della classe Python Timer. La classe timer è una sottoclasse della classe threading. Tecnicamente, si può dire che creiamo oggetti Timer quando vogliamo azioni (funzioni) delimitate dal tempo.
Ad esempio, supponiamo di voler organizzare un quiz, in cui il partecipante deve rispondere a ogni domanda in 10 secondi. Qui, possiamo creare un timer che verrà eseguito in background, e nel frattempo, il partecipante penserà alla risposta. Ora, cerchiamo di capire come creare un oggetto timer.
Sintassi della classe Timer in Python
Se non hai capito cosa fa la classe Timer, puoi pensarla in questo modo: una classe Timer chiama una funzione dopo il numero specificato di secondi.
Per avviare un timer, dobbiamo chiamare start()(proprio come i normali thread) e per fermare il timer mentre è ancora in background, possiamo chiamare cancel().
Per utilizzare la classe Timer, è necessario importare la classe di threading
threading.Timer (intervallo, funzione, args = None, kwargs = None)
Parametri-
Intervallo-Il tempo (in secondi) che si desidera attendere prima di chiamare la funzione successiva. Può essere in float o integer. Ad esempio, per 3 secondi, intervallo=3.
Funzione-La funzione che si desidera chiamare dopo l’intervallo di tempo specificato.
Un modo pervasivo per descrivere i parametri *args e **kwargs è: creare un oggetto timer che esegua la funzione con argomenti’ args’ e argomenti di parole chiave’ kwargs’ dopo che sono passati secondi di intervallo. Gli argomenti dovrebbero essere sotto forma di elenco e0 parole chiave args o kwargs sotto forma di dizionario.
Tipo di ritorno –
Chiama solo la funzione specificata nei parametri.
Metodi nella classe Timer
- start() – Indica l’inizio dell’esecuzione del timer.
- Annulla () – Durante l’esecuzione del timer, possiamo chiamare annulla se vogliamo fermarlo ().
Creazione di un oggetto Timer
a. Comprendere le basi
Per comprendere il funzionamento dell’oggetto Timer, creiamo un piccolo programma per aiutarci a capire le basi della classe.
# Importing the Timer subclass from the threading Classfrom threading import Timer# creating a basic function that will print "hello"def hello(): print ("hello, world")# creating the object of the Timer subclass# Here, 5 sec means that the execution of the function="hello" after 5 secondst = Timer(interval=5.0, function=hello)# starting the executiont.start() # after 30 seconds, "hello, world" will be printed
Output-hello, world
Capirete meglio il funzionamento del programma di cui sopra quando si tenta di eseguirlo sul proprio sistema.
b. Utilizzando il metodo annulla
Vediamo come utilizzare la funzione annulla() della classe Timer.
# Importing the Timer subclass from the threading Classfrom threading import Timer# creating a basic function that will print "hello"def hello(): print ("hello world") # creating the object of the Timer subclass# Here, 5 sec means that the execution of the function="hello" after 5 secondst = Timer(interval=5.0, function=hello) # starting the executiont.start() # after 30 seconds, "hello, world" will be printedprint("Execution begins")# cancelling the execution of the 'hello' functiont.cancel()print("END")
Execution begins END
c. Come usare il parametro ‘args’ della classe python timer
Quando abbiamo bisogno di dare gli argomenti alla funzione che deve essere chiamata, usiamo il parametro args. Dobbiamo dare l’argomento args in un array.
import threading# To take multiple inputs we can use *before the parameter.def print_name(*names): # From the array of names pick one name and print it for name in names: print("Hello",name)# In the args parameter, give an array of names t = threading.Timer(3, print_name,)# start the executiont.start()print("Execution begins...")
Execution begins...Hello AshwiniHello VandyHello Arijit
Ora che abbiamo parlato molto di tempo, come bonus, facciamo un programma che agirà come un conto alla rovescia.
Conto alla rovescia in python
Utilizzando il modulo tempo
# We will use the time moduleimport time# Create a function that will print the timedef create_countdown_timer(time): print(time,"......")time_in_sec=int(input("Please entert the time in seconds:"))for times in range(time_in_sec): # call the function and pass the current time left create_countdown_timer(time_in_sec-times) # call the function in every 1 second. time.sleep(1) print("Time is up")
Please entert the time in seconds:77 ......6 ......5 ......4 ......3 ......2 ......1 ......Time is up
Utilizzo della classe Timer python
# We will use the time moduleimport timefrom threading import Timer# Create a function that will print the timedef create_countdown_timer(time): print(time,"......")# Here you have to enter the time for which the timer will runtime_in_sec=int(input("Please enter the time in seconds:"))# For the first time we will call the function manuallycreate_countdown_timer(time_in_sec) for times in range(1,time_in_sec): # calling the Timer class every second t = Timer(1,create_countdown_timer,) t.start() time.sleep(1) print("\n Time is up")
Please entert the time in seconds:1010 ......9 ......8 ......7 ......6 ......5 ......4 ......3 ......2 ......1 ......Time is up
I timer Python come gestori di contesto
I gestori di contesto sono i modi migliori per evitare errori di memoria e crash successivi. Tutti devono aver saputo di ” con ” la dichiarazione in Python. Questa affermazione garantisce che non dobbiamo occuparci di molti oggetti per chiuderli in modo indipendente. Tutti potrebbero averlo usato con la combinazione di with e open (). Quindi, passando alla domanda principale, possiamo creare gestori di contesto per i timer Python?
Sì. A causa di molteplici funzioni di sovraccarico, possiamo facilmente creare il nostro timer python come gestore di contesto in poche righe. Iniziamo con un esempio in cui devi misurare il tempo di esecuzione del programma. Senza ridefinire tutte le variabili, un gestore di contesto può essere utilizzato ripetutamente per misurare il tempo più volte. Il seguente programma lo dimostra.
Esempio–
import timeclass Timer_Pythonpool(): """ Context manager as a python timer """ def __init__(self): self.start = None def __enter__(self): """ Notes the time at the start of the iteration """ self.start = time.time() return self def __exit__(self, exc_type, exc_value, exc_traceback): """ Prints the time taken at the end of the iteration """ print("Time to finish the task: ", time.time()-self.start) with Timer_Pythonpool() as timer: for i in range(1000000): x = 0 pass
Uscita–
Time to finish the task: 0.05392050743103027
Spiegazione –
Iniziamo creando una classe denominata ” Timer_Pythonpool.”Quindi personalizziamo gli operatori per renderli utili come context manager. _la funzione_ enter _ _ viene eseguita all’inizio del contesto e __exit__ viene eseguita alla fine del contesto. La creazione di un punto di riferimento tra queste due funzioni può fornire il tempo esatto impiegato dal contesto per l’esecuzione.
Python Timer Decorators
Decorators sono il supporto aggiuntivo per qualsiasi tipo di funzione. Definito anche come metaprogrammazione, è possibile modificare/aggiungere funzionalità ad esso. Python Decoratori Timer sono il modo più semplice per implementare le funzioni timer in python. Una volta dichiarato, è possibile utilizzare i decoratori in una riga senza nemmeno conoscerli. Aggiungendo ad esso, puoi applicarli a ogni funzione nel tuo codice per verificare quale codice impiega più tempo per essere eseguito.
Sintassi –
Per creare un decoratore di concatenamento, è necessario dichiarare più funzioni nidificate. Assegna un nome all’altra funzione come nome principale del decoratore e interno a qualsiasi nome casuale. La funzione interna recupererà il riferimento della funzione utilizzata sotto il decoratore.
Esempio–
import timedef check_time(func): def inner(*args, **kwargs): start = time.time() func(*args, **kwargs) end = time.time() print("Time taken to execute function is ", end-start) return inner@check_timedef task(): # do something for i in range(10000000): x = 0 passtask()
Uscita–
Time taken to execute function is 0.24933218955993652
Spiegazione –
Come al solito, iniziamo con l’importazione del modulo più importante da python “time.”Successivamente, creiamo un decoratore chiamato” check_time.”Al suo interno, aggiungiamo una funzione interna annidata in cui possiamo creare i riferimenti del tempo. Questi due riferimenti sono posizionati in modo che entrambi siano posizionati tra l’esecuzione della funzione.
Inoltre, creiamo una funzione di test denominata “task” per verificare se il nostro compito funziona. Quindi aggiungi un decoratore sopra di esso. Ora il decoratore farà la sua magia e stamperà il tempo impiegato dalla funzione.
Python Timer Cooldown
Python Timer Cooldown è un modo per misurare il timer all’indietro. Creando una classe timer personalizzata, possiamo registrare l’ora in ogni punto del codice. È possibile esportare questa classe come modulo e installarla come dipendenza nel codice. Quindi, utilizzando una singola riga, è possibile importarlo–
import timeclass Timer: """ Timer class """ def __init__(self): self.start = time.time() ''' Restarts the timer. ''' def restart(self): self.start = time.time() ''' Returns the time elapsed and resets the counter. ''' def get_new_time(self): value = time.time() - self.start self.restart() return value ''' Prints the time elapsed and resets the counter. ''' def print_new_time(self): print (self.get_new_time()) ''' Returns the time elapsed (Does not reset the counter). ''' def get_time(self): return time.time() - self.start self.restart() ''' Prints the time elapsed (Does not reset the counter). ''' def print_time(self): print(self.get_time()) ''' Returns the time elapsed in HH:mm:ss (Does not reset the counter). ''' def get_time_hhmmss(self): end = time.time() m, s = divmod(end - self.start, 60) h, m = divmod(m, 60) time_str = "%02d:%02d:%02d" % (h, m, s) return time_strtimer = Timer() #Initialize the timer#wash clothes for 5 secondstimer.print_time() #Print the time elapsed since Initialization (in seconds)#dry clothes for 3 secondstimer.print_new_time() #Print the time elapsed since Initialization and reset the timer#burn clothes for 10 secondsprint(str('Task done for ' + str(timer.get_time()) + ' seconds.'))
Altri moduli timer Python
Python contiene migliaia di moduli e milioni di frammenti di codice. Possiamo sempre usare i moduli open-source per usare i timer python. Github è il posto più grande per trovare tali moduli. Saltiamo a destra in questi moduli–
- termdown: Un timer python avanzato realizzato utilizzando diversi caratteri ASCII. Utilizzando questo script, è possibile creare un semplice conto alla rovescia nel terminale ed eseguire un comando alla fine. Soprattutto, ha il supporto per il conto alla rovescia vocale.
- MobTimer.Python: un timer basato su GUI realizzato in python. Questo script crea timer basati su schermo intero con più opzioni. Insieme ad esso, è possibile eseguire più timer sullo schermo allo stesso tempo utilizzando questo programma.
- timer: Questo è il timer basato sulla GUI più semplice realizzato in python (Tkinter). Caratteristiche come più timer, etichette e multithreading rendono più praticabile rispetto ad altri programmi.
- codetiming: questa classe timer registra tutti i tempi di esecuzione passati per uno specifico processo con nome. È possibile controllare il tempo minimo, il tempo massimo, il tempo intermedio e il tempo mediano per il processo specifico insieme ai record. Questo modulo può essere utilizzato in diversi modi, vale a dire, come gestore di contesto e come decoratore.
- cTimer: cTime è un timer di precisione a nanosecondi in python. Questo modulo utilizza il linguaggio c API per registrare il tempo con precisione. Se siete alla ricerca di un hardcore moduli di registrazione del tempo di precisione, questo è il migliore. (Nota: negli ultimi aggiornamenti di Python, il modulo temporale viene aggiunto con funzioni per registrare il tempo in nanosecondi)
Deve leggere:
- Come convertire la stringa in minuscolo in
- Come calcolare la radice quadrata
- User Input | Input () Function | Keyboard Input
- Best Book to Learn Python
Conclusione
Per lo più, tutti usano i timer per tre scopi. Il primo è, per registrare il tempo per l’esecuzione del codice. E il secondo è, aggiungere un promemoria per qualcosa usando un timer. Fortunatamente, entrambi possono essere creati in Python. Utilizzando diversi moduli e librerie, è possibile assicurarsi di registrare il tempo con precisione millimetrica.
Ultimo ma non meno importante, il timer è una sottoclasse della classe threading in python. Se vogliamo eseguire qualsiasi funzione dopo un certo intervallo di tempo, possiamo usare la classe python timer. Nel parametro args, che è None per impostazione predefinita, possiamo specificare gli argomenti che vogliamo dare al metodo di callback.
Prova a eseguire i programmi dalla tua parte e facci sapere se hai qualche domanda.