Profiling de un script python con line_profiler

Posted on mar 04 diciembre 2012 in Tutorial Python • 2 min read

Ahora se mostrará el uso de la herramienta line_profiler para hacer profiling de programas Python.

Lo primero que se tiene que hacer es instalar line_profiler con el comando easy_install o pip:

easy_install line_profiler
pip install line_profiler

El código que se va a revisar es el mismo del artículo anterior (matriz inversa). La diferencia es que se define en la función que genera la matriz inversa el uso del decorador profile.

El código es el siguiente:

#!/usr/bin/env python

# -*- coding: utf-8 -*-


#Se importa numpy como np

import numpy as np

#Se define el uso del decorador profile. En la funcion que genera matrices inversas.

@profile

def Inversa(n):

    a = np.matrix(np.random.rand(n, n))

    return a.I



#Se define una lista de  tamaños de la matriz

tamagno = 2 ** np.arange(0, 12)

#Se recorre la lista de tamaños y se invierte cada matriz con la

#funcion.

for n in tamagno:

    Inversa(n)

Para realizar el profiling se ejecuta el siguiente comando:

ecrespo@jewel:~/proyectos/ernesto-ecrespo.blogspot/line_profiler$ kernprof.py -l -v  matrizinversa.py 

Wrote profile results to matrizinversa.py.lprof

Timer unit: 1e-06 s



File: matrizinversa.py

Function: Inversa at line 10

Total time: 6.05993 s



Line #      Hits         Time  Per Hit   % Time  Line Contents

==============================================================

    10                                           @profile

    11                                           def Inversa(n):

    12        12       260506  21708.8      4.3      a = np.matrix(np.random.rand(n, n))

    13        12      5799424 483285.3     95.7      return a.I

El resultado muestra el tiempo total de ejecución, Luego muestra cada línea de ejecución, y el porcentaje de tiempo que se ha ejecutado. Se nota que la generación de la matriz no tarda mucho, pero al invertirla si un 95,7% del tiempo de ejecución. El significado de cada parámetro es:

  • Line: Es el número de línea en el archivo.
  • Hits: Es el número de veces que la línea se ejecuta.
  • Time: Tiempo que gasta al ejecutar cada línea.
  • Per Hit: Tiempo promedio que se gasta al ejecutar cada línea.
  • % Time: Porcentaje de tiempo que se gasta al ejecutar la línea relativo al tiempo que se gasta en ejecutar todas las líneas.

El código del script se encuentra en bitbucket.

¡Haz tu donativo! Si te gustó el artículo puedes realizar un donativo con Bitcoin (BTC) usando la billetera digital de tu preferencia a la siguiente dirección: 17MtNybhdkA9GV3UNS6BTwPcuhjXoPrSzV

O Escaneando el código QR desde la billetera:

17MtNybhdkA9GV3UNS6BTwPcuhjXoPrSzV