2009-08-25 14 views
8

Próbuję profilu skręconego kodu Pythona z Heapy. Na przykład (pseudokod):Używanie przeglądarki profili pamięci Heapy za pomocą Twisted.web

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() 

Co muszę zrobić, aby zobaczyć profil Heapy wyniki w profile browser?

Odpowiedz

6

Po obejrzeniu gupików i braku informacji o tym, jak uruchomić przeglądarkę profili, zacząłem rozglądać się po źródle gupików i ostatecznie znalazłem guppy/heapy/Prof.py, pod koniec którego zobaczyłem docstring zawierający ten wiersz:

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

Następnie, pamiętając, że musiałem zobaczyć jakąś dokumentację podając typ zwracanej guppy.hpy jak use, sprawdziłem aby zobaczyć czy guppy.hpy() PB() zrobi wszystko.. I rzeczywiście tak jest. Wygląda więc na to, jak uruchamia się przeglądarka profilera. Nie jestem pewien, czy o to pytasz, ale musiałem to zrozumieć, zanim zdołałem odpowiedzieć na inną możliwą część twojego pytania. :)

Wydaje się, że najprostszym sposobem udostępnienia tych informacji jest utworzenie zasobu na serwerze WWW, który wywoła funkcję Use.pb w ramach procesu renderowania. Istnieją inne podejścia, takie jak osadzanie włazu w twojej aplikacji lub użycie funkcji obsługi sygnału, aby go uruchomić, ale podoba mi się pomysł na zasoby. Na przykład:

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

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

Następnie można odwiedzić/przeglądarkę profili, gdy tylko zajrzy się do przeglądarki profilu. Blokada wywołania "pb" do momentu wyjścia z przeglądarki profilu (uwaga: samo zamknięcie okna z przyciskiem zniszczenia wm nie powoduje jego powrotu - wydaje się, że tylko pozycja menu wyjścia), więc serwer jest zawieszony do czasu zwolnienia w oknie, ale dla celów debugowania wydaje się, że może być dobrze.

+0

gdzie utworzyłeś h? A dokładniej, gdzie mam utworzyć instancję h, jeśli używam programu twistd? –

+0

Po prostu ponownie użyłem zmiennej 'h' z pytania - gdzie cały kod znajduje się w tym samym module, a' h' jest globalnym instancją przed uruchomieniem reaktora. To z pewnością nie jest idealną praktyką dla prawdziwego kodu świata. Możesz zrobić coś takiego jak utworzenie 'hpy' w' __init__' jednej z ważnych klas w aplikacji i zapisanie jej jako atrybutu. Innym pomysłem jest utworzenie instancji w pliku tac i dołączenie go do obiektu aplikacji. –

Powiązane problemy