2009-08-25 7 views
8

Sto provando a creare il codice Python twistato con Heapy. Per esempio (pseudo codice):Utilizzo del browser dei profili di memoria di Heapy con 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() 

Che cosa devo fare per visualizzare Heapy profilo risultati nel profile browser?

risposta

6

Dopo aver consultato il sito Web di Guppy e non aver trovato alcuna informazione su come avviare il browser dei profili, ho iniziato a cercare intorno alla fonte del guppy e infine ho trovato guppy/heapy/Profypy, al termine del quale ho visto un docstring contenente questa linea:

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

Poi, ricordando che dovevo vedere un po 'di documentazione dando il tipo di ritorno di guppy.hpy come Usa, ho controllato per vedere se guppy.hpy() PB() avrebbe fatto qualsiasi cosa.. E, davvero, lo fa. Quindi sembra che il browser del profiler sia stato lanciato. Non sono sicuro che sia questo che stavi chiedendo, ma avevo bisogno di capirlo prima di poter rispondere all'altra parte possibile della tua domanda. :)

Sembra il modo più semplice per rendere disponibili queste informazioni sarebbe creare una risorsa nel server Web che richiama Use.pb come parte del processo di rendering. Esistono altri approcci, come l'incorporamento di un passo d'uomo nella tua applicazione o l'utilizzo di un gestore di segnali per attivarlo, ma mi piace l'idea di risorsa. Quindi, ad esempio:

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

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

Quindi è possibile visitare/profile-browser ogni volta che si desidera guardare il browser del profilo. I blocchi di chiamata "pb" fino all'uscita dal browser del profilo (nota, la chiusura della finestra con il pulsante wm destroy non sembra causarne il ritorno - solo la voce di menu exit sembra) quindi il server è bloccato fino a quando non si chiude la finestra, ma a scopo di debug che sembra possa andare bene.

+0

dove hai istanziato h? O più specificamente dove posso istanziare h se lo sto usando usando twistd? –

+0

Ho appena riutilizzato la variabile 'h' dalla domanda - dove tutto il codice è nello stesso modulo e' h' è un'istanza globale prima dell'avvio del reattore. Questo certamente non è una pratica ideale per il codice del mondo reale. Potresti voler fare qualcosa come istanziare 'hpy' nel' __init__' di una delle classi importanti nella tua applicazione e salvarlo come attributo. Un'altra idea è quella di istanziarla in un file tac e collegarla all'oggetto dell'applicazione. –

Problemi correlati