如何强制删除Python类的实例?

2 投票
3 回答
9543 浏览
提问于 2025-04-16 09:12

我正在用一个脚本来测试一个网站是否运行顺利,基本上我每20分钟左右就打开一次这个网站,检查一下响应时间等等。像这样:

while True:

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

我知道Python会自己处理垃圾回收,我们其实不需要太担心这个,但当我查看网络监控时,总是发现有几个连接没有关闭,每个连接都运行了一个小时或更久。而且并不是所有打开的连接都会挂在那里,只有其中的一些。我有点困惑,或者说有没有什么方法可以手动销毁这些连接呢?

3 个回答

0

你还可以使用多进程来确保在检查完之后,所有使用的资源都能被关闭:

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

手动使用del来删除对象时,要注意这并不会真正删除这个对象,而只是减少了这个对象的引用计数。当一个对象的引用计数变为时,垃圾回收器就会把它从内存中移除。

10

试着关闭你的响应对象。

撰写回答