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.
gdzie utworzyłeś h? A dokładniej, gdzie mam utworzyć instancję h, jeśli używam programu twistd? –
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. –