Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

533
Vistas
cómo perfilar el método de clase usando la función mágica %lprun de IPython

¿Cómo puedo perfilar un método de un objeto llamado dentro de una función? Estoy usando la magia %lprun en un cuaderno jupyter. Consulte el siguiente archivo de ejemplo ex.py :

 class foo(): def __init__(self, a=0, n=1): self.a=a self.n=n def compute(self): result = 0 for i in range(self.n): result += self.a return result def my_func(): a = 1 n = 1000 my_foo = foo(a, n) result = my_foo.compute() print(result)

Luego, desde mi cuaderno jupyter, puedo perfilar my_func :

 from ex import my_func %lprun -f my_func my_func()

pero no puedo perfilar mi método de compute :

 from ex import my_func %lprun -f my_foo.compute my_func()

¿Es posible lo que quiero? ¿Cómo tendría que completar el método de clase en el argumento -f para que funcione?

De acuerdo con la documentación , "cProfile solo llama a funciones explícitas, no a métodos especiales llamados debido a la sintaxis", ... por lo que debería funcionar.

Una pregunta (quizás) relacionada que encontré está aquí .

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

TL; DR: Use foo en %lprun -f foo.compute my_func() , no my_foo como en su ejemplo.


Dado el ejemplo actual, puede perfilar su clase y método como tal:

  1. %load_ext line_profiler

  2. Perfila tu función en la que llamas a tu clase: %lprun -f my_func my_func() , que devuelve:


 Timer unit: 1e-06 s Total time: 0.000363 s File: <ipython-input-111-dedac733c95b> Function: my_func at line 12 Line # Hits Time Per Hit % Time Line Contents ============================================================== 12 def my_func(): 13 1 2.0 2.0 0.6 a = 1 14 1 1.0 1.0 0.3 n = 1000 15 1 4.0 4.0 1.1 my_foo = foo(a, n) 16 1 278.0 278.0 76.6 result = my_foo.compute() 17 1 78.0 78.0 21.5 print(result)

  1. Luego, tras la inspección, verá que la mayor parte del tiempo se gasta dentro de su método my_foo.compute() . my_foo es una instancia de la clase foo , por lo que realiza una llamada de generador de perfiles más específica %lprun -f foo.compute my_func() , que devuelve:

 Timer unit: 1e-06 s Total time: 0.001566 s File: <ipython-input-12-e96be9cf3108> Function: compute at line 6 Line # Hits Time Per Hit % Time Line Contents ============================================================== 6 def compute(self): 7 1 3.0 3.0 0.2 result = 0 8 1001 765.0 0.8 48.9 for i in range(self.n): 9 1000 797.0 0.8 50.9 result += self.a 10 1 1.0 1.0 0.1 return result

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda