Imagen del autor
Crear perfiles de código Python es útil para comprender cómo funciona el código e identificar oportunidades de optimización. Probablemente haya perfilado sus scripts de Python para métricas relacionadas con el tiempo—medir los tiempos de ejecución de secciones específicas de código.
Pero la creación de perfiles de memoria (para comprender la asignación y desasignación de memoria durante la ejecución) es igualmente importante. Porque la creación de perfiles de memoria puede ayudar a identificar pérdidas de memoria, utilización de recursos y posibles problemas de escalado.
En este tutorial, exploraremos la creación de perfiles de código Python para el uso de memoria utilizando el paquete Python. perfilador de memoria.
Comencemos instalando el paquete Python del perfilador de memoria usando pip:
pip3 install memory-profiler
Note: Instale el perfilador de memoria en un lugar dedicado ambiente virtual para el proyecto en lugar de en su entorno global. También usaremos las capacidades de trazado disponibles en el perfilador de memoria para trazar el uso de la memoria, lo que requiere matplotlib. Así que asegúrese de tener también matplotlib instalado en el entorno virtual del proyecto.
Creemos un script de Python (digamos main.py) con una función process_strs
:
- La función crea dos cadenas de Python súper largas.
str1
ystr2
y los concatena. - El argumento de la palabra clave
reps
controla el número de veces que las cadenas codificadas deben repetirse para crearstr1
ystr2
. Y le damos un valor predeterminado de 10**6 que se usará si la función llamada no especifica el valor dereps
. - Luego eliminamos explícitamente
str2
. - La función devuelve la cadena concatenada.
str3
.
# main.py
from memory_profiler import profile
@profile
def process_strs(reps=10**6):
str1 = 'python'*reps
str2 = 'programmer'*reps
str3 = str1 + str2
del str2
return str3
process_strs(reps=10**7)
Ejecutar el script debería darte un resultado similar:
Como se ve en el resultado, podemos ver la memoria utilizada, el incremento con cada creación de cadena posterior y el paso de eliminación de cadena que libera parte de la memoria utilizada.
Ejecutando el comando mprof
En lugar de ejecutar el script Python como se muestra arriba, también puede ejecutar el mprof
comando como tal:
mprof run --python main.py
Cuando ejecuta este comando, también debería poder ver un archivo .dat con los datos de uso de la memoria. Tendrás un archivo .dat cada vez que ejecutes el mprof
comando: identificado por la marca de tiempo.
Trazar el uso de la memoria
A veces es más fácil analizar el uso de la memoria a partir de un gráfico en lugar de mirar números. Recuerde que discutimos que matplotlib es una dependencia requerida para usar las capacidades de trazado.
Puede utilizar el mprof plot
comando para trazar los datos en el archivo .dat y guardarlos en un archivo de imagen (aquí salida.png):
mprof plot -o output.png
De forma predeterminada, mprof plot
utilizó los datos de la ejecución más reciente del mprof
mando.
También puede ver las marcas de tiempo mencionadas en la trama.
Registro del perfil de uso de memoria en un archivo de registro
Alternativamente, puede registrar las estadísticas de uso de memoria en un archivo de registro preferido en el directorio de trabajo. Aquí, creamos un controlador de archivos. mem_logs
al archivo de registro y configure el stream
argumento en el @profile
decorador del controlador de archivos:
# main.py
from memory_profiler import profile
mem_logs = open('mem_profile.log','a')
@profile(stream=mem_logs)
def process_strs(reps=10**6):
str1 = 'python'*reps
str2 = 'programmer'*reps
str3 = str1 + str2
del str2
return str3
process_strs(reps=10**7)
Cuando ejecute el script, debería poder ver el archivo mem_profile.log en su directorio de trabajo con el siguiente contenido:
También puedes utilizar la memory_usage()
función para comprender los recursos necesarios para que se ejecute una función específica, muestreados en intervalos de tiempo regulares.
El memory_usage
La función toma la función para perfilar, argumentos posicionales y de palabras clave como una tupla.
Aquí, nos gustaría encontrar el uso de memoria del process_strs
función con el argumento de palabra clave reps
establecido en 10**7. También establecemos el intervalo de muestreo en 0.1 s:
# main.py
from memory_profiler import memory_usage
def process_strs(reps=10**6):
str1 = 'python'*reps
str2 = 'programmer'*reps
str3 = str1 + str2
del str2
return str3
process_strs(reps=10**7)
mem_used = memory_usage((process_strs,(),{'reps':10**7}),interval=0.1)
print(mem_used)
Aquí está el resultado correspondiente:
Output >>>
[21.21875, 21.71875, 147.34375, 277.84375, 173.93359375]
También puede ajustar el intervalo de muestreo según la frecuencia con la que desea que se capture el uso de la memoria. Como ejemplo, establecemos el intervalo en 0.01 s; lo que significa que ahora obtendremos una vista más granular de la memoria utilizada.
# main.py
from memory_profiler import memory_usage
def process_strs(reps=10**6):
str1 = 'python'*reps
str2 = 'programmer'*reps
str3 = str1 + str2
del str2
return str3
process_strs(reps=10**7)
mem_used = memory_usage((process_strs,(),{'reps':10**7}),interval=0.01)
print(mem_used)
Debería poder ver un resultado similar:
Output >>>
[21.40234375, 21.90234375, 33.90234375, 46.40234375, 59.77734375, 72.90234375, 85.65234375, 98.40234375, 112.65234375, 127.02734375, 141.27734375, 155.65234375, 169.77734375, 184.02734375, 198.27734375, 212.52734375, 226.65234375, 240.40234375, 253.77734375, 266.52734375, 279.90234375, 293.65234375, 307.40234375, 321.27734375, 227.71875, 174.1171875]
En este tutorial, aprendimos cómo comenzar a crear perfiles de scripts de Python para el uso de memoria.
Específicamente, aprendimos cómo hacer esto usando el paquete Memory-profiler. Usamos el @profile
decorador y el memory_usage()
función para obtener el uso de memoria de un script de Python de muestra. También aprendimos cómo utilizar capacidades como trazar el uso de la memoria y capturar las estadísticas en un archivo de registro.
Si está interesado en perfilar su script Python para los tiempos de ejecución, considere leer Creación de perfiles de código Python utilizando timeit y cProfile.
Bala Priya C. es un desarrollador y escritor técnico de la India. Le gusta trabajar en la intersección de matemáticas, programación, ciencia de datos y creación de contenido. Sus áreas de interés y experiencia incluyen DevOps, ciencia de datos y procesamiento de lenguaje natural. ¡Le gusta leer, escribir, codificar y tomar café! Actualmente, está trabajando para aprender y compartir su conocimiento con la comunidad de desarrolladores mediante la creación de tutoriales, guías prácticas, artículos de opinión y más.
- Distribución de relaciones públicas y contenido potenciado por SEO. Consiga amplificado hoy.
- PlatoData.Network Vertical Generativo Ai. Empodérate. Accede Aquí.
- PlatoAiStream. Inteligencia Web3. Conocimiento amplificado. Accede Aquí.
- PlatoESG. Carbón, tecnología limpia, Energía, Ambiente, Solar, Gestión de residuos. Accede Aquí.
- PlatoSalud. Inteligencia en Biotecnología y Ensayos Clínicos. Accede Aquí.
- Fuente: https://www.kdnuggets.com/introduction-to-memory-profiling-in-python?utm_source=rss&utm_medium=rss&utm_campaign=introduction-to-memory-profiling-in-python