我在一个名为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名称)?
答案 0 :(得分:35)
问题是您在方法定义中导入了send_email
。
我建议你使用runctx
:
cProfile.runctx('send_email()', None, locals())
cProfile.runctx(command, globals, locals, filename=None)
此函数类似于run(),添加了参数以提供命令字符串的全局变量和本地字典。