Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

531
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!