CProfile для Python не распознает имя функции
У меня есть функция в приложении с именем email, которое я хочу профилировать. Когда я пытаюсь сделать что-то подобное, он взрывается
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 оценивает строку (искать имена func в глобальном/локальном пространстве имен)?
Ответы
Ответ 1
Проблема заключается в том, что вы импортировали send_email
внутри вашего определения метода.
Я предлагаю вам использовать runctx
:
cProfile.runctx('send_email()', None, locals())
Из официальной документации:
cProfile.runctx(command, globals, locals, filename=None)
Эта функция похожа на run(), с добавленными аргументами для предоставления словарей глобалов и локаторов для командной строки.