Introducción
En Pycon 2021, el creador del lenguaje Python, Sir Guido Van Rossum elaboró sus planes a largo y corto plazo sobre cómo hacer que las versiones futuras de Python sean más rápidas y prevé hacerlo dos veces más rápido de lo que es actualmente. PyPy y CPython son algunos de los ejemplos existentes que intentan aumentar la velocidad de ejecución de Python, pero también puede hacerlo usted mismo si solo sigue algunos consejos y trucos sobre cómo mejorar sus habilidades de codificación para que esté escribiendo código eficiente y no desperdiciando memoria o tiempo de CPU.
Entonces, ¿por qué elegir Python?
Python se ha convertido en uno de los lenguajes más aceptados debido al hecho de que es fácil de programar y muy conveniente de usar. La velocidad nunca fue uno de los puntos fuertes de Python, pero no significa que siempre tenga que dar resultados ineficientes. En pitón la gente prefiere «Velocidad de desarrollo ” sobre el «Velocidad de ejecución“. Puede que no tenga el rendimiento bruto de C o Java, pero se sorprenderá al ver qué tan rápido se puede ejecutar una aplicación Python correctamente optimizada. Esta velocidad es suficiente para impulsar varias aplicaciones como análisis de datos, herramientas de automatización, administración y muchas otras. Si sigue algunos procedimientos y consejos de codificación estándar, es posible que casi olvide que estaba intercambiando el rendimiento de la aplicación por la productividad del desarrollador en primer lugar.
1. Perfiles de código
En realidad, debe medir su código fuera de su entorno de prueba o UAT y directamente en el entorno de producción o en vivo para averiguar exactamente por qué o dónde su código se está ejecutando más lento. Aquí es donde entra en juego la creación de perfiles y puede usar el software incorporado de Python «CProfile» module para inspeccionar su código en busca de partes que puedan estar reduciendo el rendimiento de su código general.
Si necesita una mayor precisión, puede usar cualquier otro generador de perfiles potente que le proporcionará un análisis en profundidad, pero en muchos casos, un generador de perfiles simple puede ser de gran ayuda para rastrear la función culpable o la línea de código que está causando un cuello de botella. en la ejecución. Podrá identificar y probar con precisión con una línea de base para establecer patrones anormales o tiempos de ejecución en varios escenarios de implementación y puede intentar adivinar prematuramente, pero eso puede no conducir a mucho éxito y, por lo tanto, siempre debe usar un generador de perfiles para desglosar su codificar de manera eficiente.
2. Memorización
La memorización es un proceso en el que no se repite el mismo trabajo una y otra vez, incluso si se trata de una función cuyo valor ya se ha calculado previamente. Python le brinda la opción de un caché que le dará la capacidad de obtener instantáneamente resultados de funciones que se han calculado previamente. Estas funcionalidades especiales de Python se conocen como decoradores y puede usarlas en su código para acelerar su código.
Aporte :
import timeit def fib(n): if n < 2: return n else: return fib(n-1) + fib(n-2) t1 = timeit.Timer("fib(40)", "from __main__ import fib") print(t1.timeit(1))
Salida: (en mi máquina local)
47.392615799999994
Agregue las siguientes dos líneas de código:
from functools import lru_cache @lru_cache(maxsize=100)
Salida: (en mi máquina local)
5.8000000000002494e-05
Impactante, ¿no es así? Este es el poder de LRU_Cache en la biblioteca de funciones. Puede establecer un valor personalizado para la caché LRU o establecerlo en ‘Ninguno’ para almacenar todo. Se utiliza para almacenar valores que se repiten con frecuencia dentro de un período de tiempo estipulado. Por ejemplo, tal vez los elementos recuperados más recientemente durante las últimas 24 horas o un valor que se llamará varias veces durante las próximas 24 horas.
3. Utilice Numpy para todas las operaciones matemáticas
NumPy es famoso por sus operaciones matemáticas basadas en matrices o en cualquier tipo de matriz, pero el ingrediente secreto aquí es que almacena datos numéricos de manera más eficiente que las estructuras de datos incorporadas de Python. El paquete tiene muchos reemplazos para las operaciones matemáticas tradicionales y, dado que utiliza las bibliotecas de C, es mucho más rápido que las funciones generales de Python. NumPy también administra de manera eficiente su memoria para estructuras de datos muy grandes, como listas con un millón de elementos.
Numpy puede optimizar y ahorrar hasta un 75% de espacio que las listas normales de Python. NumPy Array es lo único que está cerca de los arreglos como en Java o C y es fácil de declarar y usar y, por lo tanto, se adhiere al compromiso inicial de «Velocidad de desarrollo».
4. Utilice siempre una biblioteca C siempre que sea posible
Como ya ha visto, el uso de NumPy junto con las bibliotecas C y lo poderoso que puede ser. También se puede aplicar un concepto similar a otras bibliotecas y funciones. Las bibliotecas de Python no son tan eficientes como Cones y, por lo tanto, si tiene la opción o la oportunidad de usar una biblioteca C, siempre elija la biblioteca C. Son más rápidos y eficientes que sus respectivas bibliotecas de Python. Python Ctypes Library es un excelente ejemplo que es compatible con el tiempo de ejecución de Python y aprovecha los beneficios de C.
Podrá obtener los mejores resultados al reducir el número de viajes de C a Python, ya que el paso de datos entre ellos es una operación costosa. Por ejemplo, considere dos escenarios en los que está pasando un valor a la vez en un bucle a C desde Python, calculando y devolviéndolo y, en otro caso, pasa una lista a C, realiza su cálculo allí y envía el resultado de vuelta. Elija siempre la segunda opción, ya que es mucho más rápido y eficiente en este método.
5. Conozca su biblioteca y sus funciones
Es muy fácil incluir todas las bibliotecas que conoces en un código y nunca tendrás que preocuparte por importar nada más que en la práctica, esa es una de las peores formas de codificar. Es análogo a pedir demasiada comida de la que generalmente puede manejar y, al final, se sentirá cansado y difícil de terminar. Si bien Python puede ser un lenguaje poderoso, no es excusa para acumular todas las bibliotecas existentes en él solo para evitar errores. En cambio, está dañando su propio código si está importando más de las bibliotecas requeridas a su código de Python. Siempre tenga en cuenta qué funciones necesita y qué bibliotecas son adicionales. Elimine la línea o coméntelos para eliminar esa sobrecarga y su código se ejecutará más rápido.
Notas finales
Ahora ya conoce algunos consejos y trucos sobre cómo hacer que su código sea más rápido y más eficiente mediante algunas técnicas simples y si tiene más preguntas, no dude en comunicarse conmigo en LinkedIn o si te gusta el movimiento browniano geométrico y el mercado de valores, puedes ver otro de mis artículos aquí. Manténgase a salvo y tenga un buen día.
Los medios que se muestran en este artículo sobre 5 consejos y trucos para acelerar sus programas de Python no son propiedad de DataPeaker y se utilizan a discreción del autor.