使用Heapy的内存配置文件浏览器和Twisted.web

时间:2009-08-25 23:22:04

标签: python profiling heap twisted

我试图用Heapy来描述扭曲的python代码。例如(伪代码):

from twisted.web import resource, server
from twisted.internet import reactor
from guppy import hpy

class RootResource(resource.Resource):
    render_GET(self, path, request):
        return "Hello World"

if __name__ == '__main__':
    h = hpy()
    port = 8080
    site = server.Site(RootResource(mq))
    reactor.listenTCP(port, site)
    reactor.run()

profile browser

中查看Heapy个人资料搜索结果需要做什么?

1 个答案:

答案 0 :(得分:6)

在查看了guppy网站并且没有找到有关如何在那里启动配置文件浏览器的任何信息之后,我开始查看guppy源代码并最终找到了guppy / heapy / Prof.py,最后我看到了文档字符串包含这一行:

[0] heapy_Use.html#heapykinds.Use.pb

然后,记住我已经看到一些文档给出了返回类型guppy.hpy作为Use,我检查了guppy.hpy()。pb()是否会做任何事情。确实如此。这似乎是探查器浏览器的启动方式。我不确定这是不是你问的问题,但在我回答你问题的其他可能部分之前我需要弄明白。 :)

使这些信息可用的最简单方法似乎是在Web服务器中创建一个资源,调用Use.pb作为其呈现过程的一部分。还有其他方法,例如在应用程序中嵌入检测孔,或使用信号处理程序来触发它,但我喜欢资源的想法。所以,例如:

class ProfileBrowser(Resource):
    def render_GET(self, request):
        h.pb()
        return "You saw it, right?"

...
root = RootResource(mq)
root.putChild("profile-browser", ProfileBrowser())
...

然后,只要您想查看配置文件浏览器,就可以访问/配置文件浏览器。 “pb”调用将一直阻塞,直到退出配置文件浏览器(注意,只是用wm destroy按钮关闭窗口似乎不会导致它返回 - 只有退出菜单项似乎)所以你的服务器挂起直到你解雇窗口,但出于调试目的,似乎可能没问题。