【问题标题】:PyCallGraph middleware in djangodjango 中的 PyCallGraph 中间件
【发布时间】:2015-04-21 23:41:50
【问题描述】:

我正在尝试在 django(1.4) 中实现一个中间件,以使用PyCallGraph 创建一个调用图。 我基于在网上找到的两个不同的 sn-ps。这是它的样子:

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

不予考虑。为什么?

【问题讨论】:

  • 在某些情况下会调用process_response(),但不会调用process_view(),例如当请求中间件或查看在您自己的中间件之前执行的中间件时,返回有效的HttpResonse。你能检查一下process_view() 是否真的在运行吗?
  • @knbk 是的。我还仔细检查了CallgraphMiddleware 的实例在调用process_viewprocess_response 时是否相同,是的!所以,不知道..

标签: python django debugging call-graph pycallgraph


【解决方案1】:

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

PyCharm 也没有正确配置。感谢这个答案,我解决了:
https://stackoverflow.com/a/20335280/1191416

【讨论】:

    猜你喜欢
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多