【问题标题】:How do I delete an instance of a class in python (by force)?如何在python中删除一个类的实例(强制)?
【发布时间】:2010-12-30 11:21:36
【问题描述】:

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

while True:

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

我知道 python 会自己进行垃圾收集,我们真的不应该打扰,但是当我检查网络监视器时,我总是发现几个未关闭的连接每个运行 1 小时或更长时间。并不是所有打开的连接都会挂在那里,只是其中一些。我很困惑,或者也许有一种方法可以手动销毁这些实例?

【问题讨论】:

  • 没有.close()方法?

标签: python mechanize mechanize-python


【解决方案1】:

尝试关闭您的响应对象。

【讨论】:

    【解决方案2】:
    手动

    del对象,注意这不会删除对象,而只会减少对象的reference count。当对象的reference count 到达zero 时,垃圾收集器会将其从内存中删除。

    【讨论】:

    • 您也可以使用gc.collect()(首先使用import gc)强制垃圾收集器运行,尽管这在CPython中可能不是必需的。
    • 实例删除后会自行清理吗?
    • 是的,实例将调用其__del__ 方法进行清理。
    【解决方案3】:

    您也可以使用多处理来确保检查后关闭所有使用的资源:

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 2021-04-02
      • 2011-10-09
      • 1970-01-01
      相关资源
      最近更新 更多