Как удалить экземпляр класса в Python (принудительно)? - PullRequest
2 голосов
/ 30 декабря 2010

Я использую скрипт для проверки работоспособности сайта, в основном я открываю сайт каждые 20 минут или около того, проверяю время отклика и так далее.Например:

while True:

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

Я знаю, что python сам выполняет сборку мусора, и нам не стоит об этом беспокоиться, но когда я проверяю сетевой монитор, я всегда нахожу несколько незакрытых соединений, каждое из которых работает 1 час или более.И не все открытые соединения будут зависать там, только некоторые из них.Я запутался, или, может быть, есть способ уничтожить эти экземпляры вручную?

Ответы [ 3 ]

10 голосов
/ 30 декабря 2010

Попробуйте также закрыть объект ответа.

6 голосов
/ 30 декабря 2010

del объект вручную, обратите внимание, что это не удалит объект, а просто уменьшит reference count объекта.Когда reference count объекта достигает zero, сборщик мусора удаляет его из памяти.

0 голосов
/ 30 декабря 2010

Вы также можете использовать многопроцессорность, чтобы убедиться, что все использованные ресурсы закрыты после проверки:

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