muh*_*huk 9 python django profiling
我想分析一个相对CPU密集型的自定义管理命令(使用PIL渲染图像).当我使用以下命令时,我在我的分析结果中获得了各种Django模块(admin,ORM等):
python -m cProfile manage.py testrender
Run Code Online (Sandbox Code Playgroud)
我删除了所有可能导入Django的导入,但我猜测以下是罪魁祸首:
from django.core.management.base import BaseCommand, CommandError
Run Code Online (Sandbox Code Playgroud)
有没有办法过滤掉cProfile结果?(只显示文件名,没有路径)或者,是否有其他方法可以从分析中排除/包含相应的模块/包?
muh*_*huk 17
我通过以下方式解决了这个问题:
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)
Run Code Online (Sandbox Code Playgroud)
这种方式分析统计信息是在范围内收集的_handle.所以代替:
python -m cProfile manage.py testrender
Run Code Online (Sandbox Code Playgroud)
我必须跑:
python manage.py testrender --profile
Run Code Online (Sandbox Code Playgroud)
哪个更好.
| 归档时间: |
|
| 查看次数: |
2983 次 |
| 最近记录: |