2010-12-30 1 views
2

Ich benutze ein Skript, um zu testen, ob eine Website reibungslos läuft, im Grunde öffne ich die Seite alle 20 Minuten oder so und überprüfe die Antwortzeit und so weiter. Wie folgt aus:Wie lösche ich eine Instanz einer Klasse in Python (mit Gewalt)?

while True: 

    MechBrowser = mechanize.Browser() 
    Response = MechBrowser.open("http://example.com") 
    time.sleep(1000) 

weiß, dass ich Python Garbage Collection tun selbst und wir sollten wirklich nicht stören, aber wenn ich Netzwerk-Monitor überprüfen immer ich mehrere unverschlossene Verbindung jedes Lauf 1h oder mehr. Und nicht alle Verbindungen, die dort geöffnet wurden, blieben dort hängen, nur einige von ihnen. Ich bin verwirrt, oder vielleicht gibt es eine Methode, um diese Instanzen manuell zu zerstören?

+1

Es muss nicht eine '.close()' Methode? –

Antwort

10

Versuchen Sie auch, Ihr Antwortobjekt zu schließen.

+1

+1, weil sonst etwas ausläuft. – ismail

6

del das Objekt manuell feststellen, dass dies nicht das Objekt löschen, sondern dekrementiert nur die reference count des Objekts. Wenn das reference count eines Objekts zero erreicht, entfernt der Garbage Collector es aus dem Speicher.

+0

Verstanden. del MechBrowser – Shane

+0

'del MechBrowser' – ismail

+1

Sie können den Garbage Collector auch erzwingen, indem Sie' gc.collect() '(' import gc' zuerst) ausführen, obwohl dies in CPython möglicherweise nicht notwendig ist. –

0

Sie auch Multiprozessing alle verwendeten Ressourcen, um sicherzustellen, verwenden können, sind nach der Überprüfung geschlossen:

from multiprocessing import Process 
import time 
import urllib2 

def check_url(url): 
    try: 
     f = urllib2.urlopen(url) 
     f.close() 
     print "%s working fine" % url 
    except Exception as exc: 
     print "Error ", exc 

if __name__ == '__main__': 
    while True: 
     p = Process(target=check_url, args=("http://www.google.com",)) 
     p.start() 
     p.join() 
     time.sleep(5) 
Verwandte Themen