Django 中的 PyCallGraph 中间件

PyCallGraph middleware in django

我正在尝试在 django(1.4) 中实现一个中间件,以使用 PyCallGraph 创建一个 调用图 。 我从网上找到的两个不同的片段中得出了它。这是它的样子:

import time
from django.conf import settings
from pycallgraph import Config
from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput

class CallgraphMiddleware(object):
    def process_view(self, request, callback, callback_args, callback_kwargs):
        if settings.DEBUG and 'graph' in request.GET:
            config = Config()
            config.trace_filter = GlobbingFilter(exclude=['pycallgraph.*','*.secret_function',], include=['reports.*'])
            graphviz = GraphvizOutput(output_file='callgraph-' + str(time.time()) + '.png')
            pycallgraph = PyCallGraph(output=graphviz, config=config)
            pycallgraph.start()
            self.pycallgraph = pycallgraph

    def process_response(self, request, response):
        if settings.DEBUG and 'graph' in request.GET:
            self.pycallgraph.done()
        return response

我已经将它添加到 settings.py 上安装的其他中间件,然后启动了服务器。
它似乎在调用 process_view 时触发,但当它到达 process_response 时,django 抱怨,告诉我 'CallgraphMiddleware' object has no attribute 'pycallgraph'。这怎么可能?显然是

self.pycallgraph = pycallgraph

未考虑在内。为什么?

我确实忘记导入 GlobbingFilter 所以我有一个例外不会让代码 运行 到行 self.pycallgraph = pycallgraph

另外 PyCharm 配置不正确。我解决了感谢这个答案: