Perfilado de memoria en Python usando memory_profiler

Si usa mucho Python, probablemente sepa que muchas personas afirman que Python requiere más tiempo para ejecutarse. Bueno, probablemente haya visto enfoques como el tiempo total dedicado a ejecutar una parte del código o algo así, pero a veces necesita algo más que eso. ¿Qué pasa con el uso de RAM? Nadie habla realmente de eso, pero es igualmente esencial. Esto puede parecer realmente insignificante, pero en realidad es bastante importante al escribir código para producción. 

Usaremos el perfilador de memoria de PyPi. También necesitaremos requests para probar la funcionalidad. Para hacerlo, simplemente escriba lo siguiente en su terminal

pip3 install memory-profiler requests

Nota: si está trabajando en Windows o usando un entorno virtual, entonces será pip en lugar de pip3

Ahora que todo está configurado, el descanso es bastante fácil e interesante, obviamente. Cree un nuevo archivo con el nombre word_extractor.py y agréguele el código. A continuación se muestra la implementación del código. Todo está bastante bien documentado como comentarios en línea.

Python3

# imports
from memory_profiler import profile
import requests
  
  
class BaseExtractor:
    # decorator which specifies which
    # function to monitor
    @profile
    def parse_list(self, array):
        
        # create a file object
        f = open('words.txt', 'w')
        for word in array:
              
            # writing words to file
            f.writelines(word)
      
    # decorator which specifies which 
    # function to monitor
    @profile
    def parse_url(self, url):
        
        # fetches the response
        response = requests.get(url).text
        with open('url.txt', 'w') as f:
              
            # writing response to file
            f.writelines(response)

Observe el @profile esto es un decorador. Cualquier función que esté decorada por este decorador, esa función será rastreada. Ahora, nuestro código principal está listo. Escribamos el código del controlador que llamará a esta clase de funciones. Ahora, cree otro archivo llamado run.py e inserte el siguiente código en él.

Python3

from word_extractor import BaseExtractor
  
  
if __name__ == "__main__":
      
    # url for word list (huge)
    url = 'https://raw.githubusercontent.com/dwyl/english-words/master/words.txt'
      
    # word list in array
    array = ['one', 'two', 'three', 'four', 'five']
      
    # initializing BaseExtractor object
    extractor = BaseExtractor()
      
    # calling parse_url function
    extractor.parse_url(url)
      
    # calling pasrse_list function
    extractor.parse_list(array)

Entonces, básicamente ahora hemos terminado. Notará que parse_url() consumirá más memoria que parse_list(), lo cual es obvio porque parse_url llama a una URL y escribe el contenido de la respuesta en un archivo de texto. Si abre el enlace, encontrará que la lista de palabras es enorme. Entonces, ahora para probar su código, simplemente ejecute el archivo run.py. Puede hacerlo escribiendo 

python3 run.py

Nota: si está trabajando en Windows o usando un entorno virtual, entonces será python en lugar de python3

Si todo funcionó correctamente, debería ver algo como esto

Estadísticas del perfilador de memoria

Una cosa importante para recordar es que el perfilador de memoria en sí mismo consume una cantidad significativa de memoria. Use esto solo en desarrollo pero evítelo en producción.

Publicación traducida automáticamente

Artículo escrito por debdutgoswami y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *