Comprender la clase de temporizador Python con ejemplos

Python tiene miles de módulos y bibliotecas para satisfacer las demandas del codificador. Sin embargo, para que sean útiles, primero hay que entenderlos y luego aplicarlos. Sin el conocimiento previo de ciertos módulos, es incierto lo que desea hacer y lo que el módulo realmente hace. El tiempo es uno de los factores importantes en los problemas de codificación. Todos los códigos están destinados a reducir el trabajo humano mediante el uso de sus potentes algoritmos. La gestión del tiempo crea un gran impacto en el análisis del rendimiento de su código. Es por eso que hoy, aprenderemos en profundidad sobre cómo funciona el temporizador en Python.

Python Timer es una clase / biblioteca para administrar la complejidad del tiempo de su código. Mediante el uso de varios módulos de tiempo, puede crear un sistema en su código para comprobar el tiempo que tarda el fragmento de código correspondiente. Hay diferentes tipos de implementaciones de temporizador en python de acuerdo con las necesidades del usuario, a saber, la función de temporizador de python (para verificar el tiempo de ejecución del script), el temporizador de subprocesos de python (para verificar el tiempo que tarda un subproceso en terminar), el temporizador de cuenta regresiva de python (crear un temporizador de cuenta regresiva) y el módulo de tiempo básico de python (para ayudar con otras actividades).

Todas estas funciones de implementación de temporizador son diferentes y se centran en proporcionar un uso diferente al usuario final. En esta publicación, revisaremos cada implementación de temporizador en detalle. Puede usar la Tabla de Contenido para saltar a la implementación del temporizador de python correspondiente.

Catálogo

Funciones básicas del temporizador Python

El módulo más importante en Python con respecto al tiempo es el tiempo. Este módulo contiene todas las funciones básicas para comprobar el tiempo y analizarlo. Este análisis le ayudará a comprender el rendimiento de su código y su eficiencia. Repasaremos cada una de las funciones importantes de este módulo junto con sus ejemplos.

A continuación se presentan las funciones básicas del temporizador Python que utilizan el módulo de tiempo–

  • tiempo.time ()
  • time.thread_time ()
  • time.process_time ()
  • time.perf_counter ()
  • time.monótono()

Hora de la función.time

time.time() devuelve el tiempo en segundos (flotante) después de la época. En general, la época se establece en enero 1, 1970, 00:00:00 (UTC), y el número de segundos después de que se devuelva esta época. Esta función depende del tiempo de la computadora para calcular el número de segundos. Si cambia el tiempo de la computadora entre la ejecución de python, puede obtener números extraños usando esta función.

Ejemplo–

import timestart = time.time() #start timefor i in range(1000000): passend = time.time()print("Elapsed time is {}".format(end-start))

Explicación –

en primer lugar, comenzamos con la importación del módulo de tiempo. Este módulo contiene todas las funciones de tiempo básicas que usaremos en esta sección. Al inicio del código, declararemos la variable de inicio como time.time(). Esto almacenará la hora actual de la CPU en número flotante de la época. Usaremos esta variable de inicio como punto de referencia para medir el tiempo. La siguiente parte contiene todos los códigos que desea usar(En este ejemplo, hemos utilizado un bucle for). Del mismo modo, registre la hora de finalización de la CPU (hora predeterminada) y verifique el tiempo total de ejecución utilizando end – start.

Esto imprimirá el tiempo que tarda el código en segundos. Con el uso de esta técnica, puede verificar el tiempo que toma su código. El único problema con este método es que el tiempo de CPU se puede cambiar mientras se ejecuta el código. Esto resultará en un comportamiento problemático en el temporizador de python.

Tiempo de función.Thread_time

time.thread_time() devuelve la suma de tiempo de sistema y CPU (flotante) en el subproceso en ejecución actual. Además, no incluye el tiempo que pasas en la función time.sleep(). Como la función es específica del subproceso, puede usarla para registrar las diferencias de tiempo siempre que las referencias de tiempo pertenezcan al mismo subproceso.

Ejemplo–

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))

Explicación –

Como thread_time devuelve la hora específica del hilo, debemos asegurarnos de usar referencias en el mismo hilo. Para este propósito, hemos instanciado el hilo de la función ‘hello’ y calculado el tiempo que toma el hilo dentro de él. Sin embargo, asegúrese de que no puede obtener la hora actual llamando a thread_time() porque devuelve un valor fraccionario. Pero definitivamente puedes comprobar la diferencia entre dos referencias consecutivas siempre y cuando pertenezcan al mismo hilo.

Tiempo de función.Process_time

time.process_time() devuelve la referencia de tiempo en segundos fraccionados (float) de la suma del tiempo del sistema y el tiempo de CPU del progreso actual. Igual que thread_time, esta función no mide el tiempo pasado en la función time.sleep(). Además, esta función crea una referencia basada en el proceso. Como resultado de esto, solo la diferencia de tiempo entre dos referencias consecutivas tendrá sentido.

Ejemplo–

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)

Explicación –

comenzamos con la importación de la process_time función y registrar la hora de inicio y fin entre el código. La única diferencia entre legacy time.time() y time.proces_time() es que el tiempo de procesamiento registra las referencias de tiempo del proceso actual, mientras que time() registra el tiempo absoluto del sistema.

Tiempo de función.Perf_counter

Contador Perf significa Contador de rendimiento. Esta función devuelve el valor de alta resolución del tiempo, que es válido por un corto período de tiempo. Esta función se utiliza para obtener el recuento de tiempo preciso entre dos referencias. Como otras funciones de temporizador de Python no incluyen el tiempo de reposo, perf_counter tampoco lo incluye. Pasemos a un ejemplo –

Ejemplo–

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) 

Explicación –

Puede usar el contador de perforado de la misma manera que el temporizador de proceso o el temporizador de subprocesos. La única diferencia es que el contador perf devolverá un valor preciso alto del tiempo transcurrido. Pero asegúrese de usar esto entre procesos pequeños, ya que utiliza alta precisión. Hemos utilizado un bucle simple para comprobar el tiempo que tarda.

Tiempo de función.monotonic

Monotonic es un temporizador de python que no puede retroceder. Al ejecutar un script de python, el usuario puede cambiar el tiempo y puede hacer una gran diferencia en la implementación del temporizador en python. Pero el temporizador monótono asegura que las referencias de tiempo se ajusten a los cambios externos.

Ejemplo–

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) 

Explicación –

lo primero que importar la forma monotónica desde el módulo de tiempo. A continuación, cree dos referencias llamadas start y end en la parte superior e inferior del código. Esto medirá el tiempo entre las dos referencias y evitará todos los cambios externos en los tiempos del sistema.

Clases personalizadas de temporizador de Python

Puede crear su propia clase de temporizador personalizada para hacer las cosas de acuerdo con sus necesidades. Una de las principales ventajas de crear una clase personalizada es que puede administrar todo el tiempo en una sola línea. No es necesario importar la clase de tiempo cada vez y registrar las referencias. Además, puede volcar sus datos y registrar todas las ejecuciones de tiempo pasado para elegir el mejor algoritmo para usted.

Esta sección creará una clase personalizada para administrar la hora y registrar todas las diferencias horarias en sus códigos. Vamos a sumergirnos en él –

Temporizador.py–

Comenzaremos importando el módulo de tiempo. A continuación, inicialice la clase python Timer y comience a definir los atributos y métodos. Hasta ahora, solo hemos incluido el atributo básico para mantener una referencia de inicio de la clase. Para hacerlo más complejo, puede crear varios atributos. Hasta ahora, hay tres métodos enumerados a continuación–

  1. start – (Opcional) Para iniciar el temporizador.
  2. log-Para registrar el tiempo transcurrido actual en relación con la hora de inicio.
  3. hito: Para restablecer el temporizador y comenzar su conteo desde 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 –

A continuación se dan ejemplos de uso de la clase anterior. Como puede ver, puede mantener su código limpio creando una clase de temporizador personalizada y aumentar la flexibilidad.

import timertime = timer.Timer()for i in range(1000000):passp = 1time.log()for i in range(1000000):passp = 1time.log()

Producto–

Time log - 0.054854631423950195Time log - 0.10871052742004395

Temporizador Python usando Threading

Cuando queremos realizar alguna operación o queremos que nuestra función se ejecute después de un cierto tiempo, hacemos uso de la clase Python Timer. La clase timer es una subclase de la clase threading. Técnicamente, se puede decir que creamos objetos de temporizador cuando queremos acciones (funciones) limitadas por el tiempo.

Por ejemplo, supongamos que queremos organizar un cuestionario, donde el participante tiene que responder cada pregunta en 10 segundos. Aquí, podemos crear un temporizador que se ejecutará en segundo plano, y mientras tanto, el participante estará pensando en la respuesta. Ahora, vamos a entender cómo crear un objeto de temporizador.

Sintaxis de la clase de temporizador en Python

Si no ha entendido lo que hace la clase de temporizador, puede pensarlo de esta manera: Una clase de temporizador llama a una función después del número de segundos especificado.

Para iniciar un temporizador, necesitamos llamar a start () (al igual que los hilos normales), y para detener el temporizador mientras todavía está en segundo plano, podemos llamar a cancel ().

Para usar la clase Timer, necesitamos importar la clase threading

threading.Temporizador (intervalo, función, args = Ninguno, kwargs = Ninguno)

Parámetros –

Intervalo– El tiempo (en segundos) que desea esperar antes de llamar a la siguiente función. Puede ser flotante o entero. Por ejemplo, durante 3 segundos, intervalo=3. Función

: La función a la que desea llamar después del intervalo de tiempo especificado.

Una forma generalizada de describir los parámetros *args y **kwargs es crear un objeto de temporizador que ejecute la función con argumentos’ args’ y argumentos de palabras clave’ kwargs’ después de que hayan pasado los segundos de intervalo. Args debe ser en forma de lista y 0 palabras clave args o kwargs en forma de diccionario.

Tipo de retorno –

Solo llama a la función especificada en los parámetros.

Métodos en la clase de temporizador

  1. start () – Significa el comienzo de la ejecución del temporizador.
  2. Cancel () – Durante la ejecución del temporizador, podemos llamar a cancel si queremos detenerlo ().

Crear un objeto de temporizador

a. Comprender los conceptos básicos

Para comprender el funcionamiento del objeto Temporizador, creemos un pequeño programa que nos ayude a comprender los conceptos básicos de la clase.

# 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
temporizador python

Comprenderá mejor el funcionamiento del programa anterior cuando intente ejecutarlo en su propio sistema.

b. Usando el método cancel

Veamos cómo usar la función cancel () de la clase 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. Cómo usar el parámetro ‘args’ de la clase de temporizador python

Cuando necesitamos dar los argumentos a la función que necesita ser llamada, usamos el parámetro args. Debemos dar el argumento args en una matriz.

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

Ahora que hemos hablado mucho sobre el tiempo, como un bono, hagamos un programa que actúe como un Temporizador de cuenta Regresiva.

Temporizador de cuenta regresiva en python

Usando el módulo de tiempo

# 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

Uso de la clase de Temporizador 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

Los temporizadores de Python como Administradores de contexto

Los administradores de contexto son la mejor manera de evitar errores de memoria y bloqueos posteriores. Todo el mundo debe haber sabido acerca de «con» la declaración en Python. Esta declaración asegura que no tenemos que cuidar de muchos objetos para cerrarlos de forma independiente. Todo el mundo podría haberlo usado con la combinación de la función with y open (). Pasando a la pregunta principal, ¿podemos crear Gestores de Contexto para Temporizadores Python?

Sí. Debido a las múltiples funciones de sobrecarga, podemos crear fácilmente nuestro propio temporizador python como administrador de contexto en solo unas pocas líneas. Comencemos con un ejemplo en el que debe medir el tiempo de ejecución del programa. Sin redefinir todas las variables, se puede usar un administrador de contexto repetidamente para medir el tiempo varias veces. El siguiente programa lo demuestra.

Ejemplo–

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

Salida–

Time to finish the task: 0.05392050743103027

Explicación –

comenzamos por crear una clase denominada «Timer_Pythonpool.»Luego personalizamos los operadores para que sean útiles como administrador de contexto. _la función _ enter _ _ se ejecuta al inicio del contexto, y __exit__ se ejecuta al final del contexto. Crear un punto de referencia entre estas dos funciones puede darle el tiempo exacto que el contexto tarda en ejecutarse.

Decoradores de temporizador Python

Los decoradores son el soporte adicional para cualquier tipo de función. También denominado como metaprogramación, puede modificar/agregar funcionalidad a la misma. Los decoradores de temporizador de Python son la forma más fácil de implementar las funciones de temporizador en python. Una vez declarado, puede usar los decoradores en una línea sin siquiera conocerlos. Además, puede aplicarlos a cada función de su código para verificar qué código tarda más tiempo en ejecutarse.

Sintaxis –

Para crear un decorador de encadenamiento, debe declarar varias funciones anidadas. Nombre la otra función como su nombre de decorador principal e interno a cualquier nombre aleatorio. La función interna obtendrá la referencia de la función utilizada debajo del decorador.

Ejemplo–

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()

Producto–

Time taken to execute function is 0.24933218955993652

Explicación –

Como de costumbre, comenzamos con la importación del módulo más importante de python «time».»A continuación, creamos un decorador llamado «check_time».»En su interior, agregamos una función interna anidada donde podemos crear las referencias de tiempo. Estas dos referencias se colocan de manera que ambas se colocan entre la ejecución de la función.

Además, creamos una función de prueba llamada «tarea» para verificar si nuestra tarea funciona. Luego agrega un decorador encima. Ahora el decorador hará su magia e imprimirá el tiempo que tarda la función.

Tiempo de reutilización del temporizador Python

El tiempo de reutilización del temporizador Python es una forma de medir el temporizador hacia atrás. Al crear una clase de temporizador personalizada, podemos registrar la hora en cada punto de su código. Puede exportar esta clase como un módulo e instalarla como una dependencia en su código. Luego, utilizando una sola línea, puede importarla–

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.'))

Otros módulos de temporizador Python

Python contiene miles de módulos y millones de fragmentos de código. Siempre podemos usar los módulos de código abierto para usar temporizadores python. Github es el lugar más grande para encontrar estos módulos. Vayamos directamente a estos módulos–

  1. termdown: Un temporizador avanzado de python hecho con diferentes caracteres ASCII. Con este script, puede crear un temporizador de cuenta regresiva simple en su terminal y ejecutar un comando al final. Lo más importante es que tiene soporte para cuenta regresiva de voz.
  2. MobTimer.Python: Un temporizador basado en GUI hecho en python. Este script crea temporizadores basados en pantalla completa con múltiples opciones. Junto con él, puede ejecutar varios temporizadores en su pantalla al mismo tiempo utilizando este programa.temporizador
  3. : Este es el temporizador basado en GUI más básico hecho en python (Tkinter). Características como temporizadores múltiples, etiquetas y subprocesos múltiples lo hacen más viable sobre otros programas.
  4. codetiming: Esta clase de temporizador registra todos los tiempos de ejecución pasados para un proceso con nombre específico. Puede verificar el tiempo mínimo, el tiempo máximo, el tiempo medio y el tiempo medio para el proceso específico junto con los registros. Este módulo se puede usar de múltiples maneras, a saber, como administrador de contexto y como decorador.
  5. cTimer: cTime es un temporizador de precisión de nanosegundos en python. Este módulo utiliza la API de lenguaje c para registrar la hora con precisión. Si estás buscando un módulo de grabación de tiempo de precisión hardcore, este es el mejor. (Nota: En actualizaciones recientes de python, se agrega el módulo de tiempo con funciones para registrar el tiempo en nanosegundos)

Debe Leerse:

  • Cómo Convertir Cadena a Minúsculas en
  • Cómo Calcular Raíz Cuadrada
  • Entrada de Usuario / Función de Entrada () / Entrada de teclado
  • Mejor Libro para aprender Python

Conclusión

En su mayoría, todos usan temporizadores para tres propósitos. El primero es registrar el tiempo de ejecución de su código. Y el segundo es, agregar un recordatorio de algo usando un temporizador. Afortunadamente, ambos se pueden crear en Python. Al usar diferentes módulos y bibliotecas, puede asegurarse de registrar el tiempo con una precisión milimétrica.

Por último, pero no menos importante, el temporizador es una subclase de la Clase threading en python. Si queremos ejecutar cualquier función después de un cierto intervalo de tiempo, podemos usar la clase python timer. En el parámetro args, que es None por defecto, podemos especificar los argumentos que queremos dar al método de devolución de llamada.

Intente ejecutar los programas de su lado y háganos saber si tiene alguna consulta.

You might also like

Deja una respuesta

Tu dirección de correo electrónico no será publicada.