Python 如何以独占方式评测Django自定义管理命令

Python 如何以独占方式评测Django自定义管理命令,python,django,profiling,Python,Django,Profiling,我想分析一个相对CPU密集型的自定义管理命令(使用PIL渲染图像)。当我使用以下命令时,我会在分析结果中获得各种Django模块(admin、ORM等): python -m cProfile manage.py testrender 我已经删除了所有可能导入Django的导入,但我猜以下是罪魁祸首: from django.core.management.base import BaseCommand, CommandError 有没有办法过滤出cProfile结果?(只显示文件名,没有路

我想分析一个相对CPU密集型的自定义管理命令(使用PIL渲染图像)。当我使用以下命令时,我会在分析结果中获得各种Django模块(admin、ORM等):

python -m cProfile manage.py testrender
我已经删除了所有可能导入Django的导入,但我猜以下是罪魁祸首:

from django.core.management.base import BaseCommand, CommandError

有没有办法过滤出
cProfile
结果?(只显示文件名,没有路径)或者,是否有其他方法从分析中排除/包括各个模块/包?

如果我找不到任何答案。这是可以接受的黑客行为


它不会过滤掉我不感兴趣的模块,但希望它能更容易地将我的代码和Django模块分离,直观地检查结果。

将PIL功能分离到自己模块中自己的函数/类中,然后从管理命令导入。然后,您可以独立于Django测试/评测PIL功能。

我通过以下方式解决了此问题:

from cProfile import Profile
from django.core.management.base import BaseCommand


class Command(BaseCommand):
    ...

    def _handle(self, *args, **options):
        # Actual code I want to profile
        pass

    def handle(self, *args, **options):
        if options['profile']:
            profiler = Profile()
            profiler.runcall(self._handle, *args, **options)
            profiler.print_stats()
        else:
            self._handle(*args, **options)
这样,在
\u handle
的范围内收集分析统计信息。因此,不是:

python -m cProfile manage.py testrender
我得跑了:

python manage.py testrender --profile

这甚至更好。

@Geo grep没有多大帮助,因为没有给出文件路径。只打印文件名。现在假设我有一个utils.py,我想分析它,在Django的某个地方有另一个utils.py,就像你说的,在一个单独的模块中,从命令导入。问题是如何独立地分析。我甚至不需要超级隔离,我只是不想要50个相关条目和950个无关条目。你想让我发布一些代码吗?我不明白问题出在哪里。如果您将它分离成自己的模块(它根本没有对Django的引用),那么您不能编写一个简单的测试工具来测试该模块并对其进行分析吗?我看不出在你的个人资料输出中会有任何Django代码。你是说创建另一个可执行文件?这将是一个解决办法。我只是想知道是否有可能使用Django管理命令。似乎这在Django中的更改中不再有效,但我从中找到了答案。