cProfile для Python не распознает имя функции

У меня есть функция в приложении под названием электронная почта, которую я хочу профилировать. Когда я пытаюсь сделать что-то подобное, он взрывается

   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)')

Когда я запускаю эту команду управления, она выдает следующую ошибку:

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

Что мне здесь не хватает? Как cProfile оценивает строку (ищет имена функций в глобальном/локальном пространстве имен)?


person Ben    schedule 17.01.2012    source источник


Ответы (1)


Проблема в том, что вы импортировали send_email внутри определения метода.

Я предлагаю вам использовать runctx:

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

Из официальной документации:

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

Эта функция похожа на run(), но с добавленными аргументами для предоставления словарей глобальных и локальных переменных для командной строки.

person Rik Poggi    schedule 17.01.2012
comment
для меня: cProfile.runctx('send_email()', globals(), locals(), имя файла=Нет) - person Oliver Wilken; 16.03.2018