2012-01-17 27 views
13

Tengo una función en una aplicación llamada correo electrónico que quiero perfilar. Cuando trato de hacer algo como esto, se explotacPerfil para Python no reconoce Nombre de función

from django.core.management import BaseCommand 
    import cProfile 


    class Command(BaseCommand): 
     def handle(self, *args, **options): 
      from email.modname import send_email 
      cProfile.run('send_email(user_id=1, city_id=4)') 

Cuando ejecuto este comando de administración, que arroja el siguiente error:

 exec cmd in globals, locals 
    File "<string>", line 1, in <module> 
    NameError: name 'send_email' is not defined 

Qué me estoy perdiendo aquí? ¿Cómo evalúa cProfile la cadena (busca nombres de func en el espacio de nombres global/local)?

Respuesta

22

El problema es que importó send_email dentro de la definición de su método.

que sugerimos utilizar runctx:

cProfile.runctx('send_email()', None, locals()) 

De the official documentation:

cProfile.runctx(command, globals, locals, filename=None) 

Esta función es similar a ejecutar(), con argumentos adicionales para el suministro de las variables globales y locales diccionarios para la cadena de comando.

+0

Gracias Rik, esto sin dudas funcionó. – Ben

Cuestiones relacionadas