Este artículo le presentará un método para medir el tiempo de ejecución de sus fragmentos de código de Python.
Usaremos una biblioteca de python incorporada timeit .
Este módulo proporciona una forma sencilla de encontrar el tiempo de ejecución de pequeños fragmentos de código Python.
¿Por qué timeit?
- Bueno, ¿qué tal usar un módulo de tiempo simple? ¡Simplemente guarde el tiempo antes y después de la ejecución del código y sustráigalos! Pero este método no es preciso, ya que puede haber un proceso en segundo plano ejecutándose momentáneamente que interrumpe la ejecución del código y obtendrá variaciones significativas en el tiempo de ejecución de pequeños fragmentos de código.
- timeit ejecuta su fragmento de código millones de veces (el valor predeterminado es 1000000) para que obtenga la medida estadísticamente más relevante del tiempo de ejecución del código.
- timeit es bastante simple de usar y tiene una interfaz de línea de comandos, así como una invocable.
Así que ahora, ¡comencemos a explorar esta útil biblioteca!
La función del módulo timeit.timeit(stmt, setup, timer, number) acepta cuatro argumentos:
- stmt que es la declaración que desea medir; por defecto es ‘aprobado’.
- configuración que es el código que ejecuta antes de ejecutar el stmt ; por defecto es ‘aprobado’.
Generalmente usamos esto para importar los módulos requeridos para nuestro código. - temporizador que es un objeto timeit.Timer ; por lo general, tiene un valor predeterminado razonable para que no tenga que preocuparse por eso.
- número que es el número de ejecuciones que le gustaría ejecutar el stmt .
Donde la función timeit.timeit() devuelve la cantidad de segundos que tomó ejecutar el código.
Ejemplo 1
Veamos primero un ejemplo básico.
Python3
# importing the required module import timeit # code snippet to be executed only once mysetup = "from math import sqrt" # code snippet whose execution time is to be measured mycode = ''' def example(): mylist = [] for x in range(100): mylist.append(sqrt(x)) ''' # timeit statement print (timeit.timeit(setup = mysetup, stmt = mycode, number = 10000))
- La salida del programa anterior será el tiempo de ejecución (en segundos) para 10000 iteraciones del fragmento de código pasado a la función timeit.timeit() .
Nota: preste atención al hecho de que el resultado es el tiempo de ejecución de varias veces la iteración del fragmento de código, no la iteración única. Para un exec de una sola iteración. tiempo, divida el tiempo de salida por el número . - El programa es bastante sencillo. Todo lo que tenemos que hacer es pasar el código como una string a la función timeit.timeit() .
- Es aconsejable mantener las declaraciones de importación y otras piezas estáticas de código en el argumento de configuración.
Ejemplo 2
Veamos otro ejemplo práctico en el que compararemos dos técnicas de búsqueda, a saber, Búsqueda binaria y Búsqueda lineal .
Además, aquí muestro dos características más, la función timeit.repeat y llamar a las funciones ya definidas en nuestro programa.
Python3
# importing the required modules import timeit # binary search function def binary_search(mylist, find): while len(mylist) > 0: mid = (len(mylist))//2 if mylist[mid] == find: return True else if mylist[mid] < find: mylist = mylist[:mid] else: mylist = mylist[mid + 1:] return False # linear search function def linear_search(mylist, find): for x in mylist: if x == find: return True return False # compute binary search time def binary_time(): SETUP_CODE = ''' from __main__ import binary_search from random import randint''' TEST_CODE = ''' mylist = [x for x in range(10000)] find = randint(0, len(mylist)) binary_search(mylist, find)''' # timeit.repeat statement times = timeit.repeat(setup = SETUP_CODE, stmt = TEST_CODE, repeat = 3, number = 10000) # printing minimum exec. time print('Binary search time: {}'.format(min(times))) # compute linear search time def linear_time(): SETUP_CODE = ''' from __main__ import linear_search from random import randint''' TEST_CODE = ''' mylist = [x for x in range(10000)] find = randint(0, len(mylist)) linear_search(mylist, find) ''' # timeit.repeat statement times = timeit.repeat(setup = SETUP_CODE, stmt = TEST_CODE, repeat = 3, number = 10000) # printing minimum exec. time print('Linear search time: {}'.format(min(times))) if __name__ == "__main__": linear_time() binary_time()
- La salida del programa anterior será el valor mínimo en la lista de tiempos .
Así es como se ve una salida de muestra:
- describa a continuación cómo puede utilizar la línea de comando
- La función timeit.repeat() acepta un argumento adicional, repeat . El resultado será una lista de los tiempos de ejecución de todas las ejecuciones de código repetidas un número específico. de tiempos
- En el argumento de configuración, pasamos:
from __main__ import binary_search from random import randint
- Esto importará la definición de la función binary_search , ya definida en el programa y la función de biblioteca aleatoria randint .
- Como era de esperar, notamos que el tiempo de ejecución de la búsqueda binaria es significativamente más bajo que el de la búsqueda lineal.
Ejemplo 3
Finalmente, demuestro a continuación cómo puede utilizar la interfaz de línea de comandos del módulo timeit :
Aquí explico cada término individualmente:
Entonces, esta fue una introducción breve pero concisa al módulo timeit y sus aplicaciones prácticas.
Es una herramienta bastante útil para los programadores de python cuando necesitan un vistazo rápido del tiempo de ejecución de sus fragmentos de código.
Este artículo es una contribución de Nikhil Kumar . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA