2

スクリプトを使用して、ウェブサイトがスムーズに動作するかどうかをテストしています。基本的には 20 分ごとにサイトを開いて、応答時間などを確認しています。このような:

while True:

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

Python 自体がガベージ コレクションを実行することはわかっていますが、気にする必要はありませんが、ネットワーク モニターを確認すると、それぞれ 1 時間以上実行されているいくつかの閉じられていない接続が常に見つかります。そして、開かれた接続のすべてがそこでハングするわけではなく、一部だけです。私は混乱していますか、これらのインスタンスを手動で破棄する方法がありますか?

4

3 に答える 3

10

応答オブジェクトも閉じてみてください。

于 2010-12-30T11:28:43.893 に答える
6

delオブジェクトを手動で削除すると、オブジェクトは削除されず、オブジェクトの が減少するだけであることに注意してくださいreference countreference countオブジェクトの がガベージ コレクターに到達すると、そのオブジェクトzeroはメモリから削除されます。

于 2010-12-30T11:24:39.383 に答える
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)
于 2010-12-30T14:44:39.443 に答える