python - 如何删除 python 脚本中无用的连接?

标签 python garbage-collection urllib2

我最好使用以下示例代码来解释我的问题:

while True:
    NewThread = threading.Thread(target = CheckSite, args = ("http://example.com", "http://demo.com"))
    NewThread.start()

    time.sleep(300)

def CheckSite(Url1, Url2):
    try:
        Response1 = urllib2.urlopen(Url1)
        Response2 = urllib2.urlopen(Url2)
        del Response1
        del Response2
    except Exception, reason:
        print "How should I delete Response1 and Response2 when exception occurs?"
        del Response1
        del Response2 #### You can't simply write this as Reponse2 might not even exist if exception shows up running Response1

我写了一个非常长的脚本,它用于检查不同站点的运行状态(响应时间或类似的东西),就像我在前面的代码中所做的那样,我使用几个线程分别检查不同的站点。正如您所看到的,每个线程中都会有多个服务器请求,当然您会时不时地收到 403 或类似的消息。我一直认为那些浪费的连接(有异常(exception)的连接)会被Python中的某种垃圾收集器收集,所以我就不管它们了。

但是当我检查网络监视器时,我发现那些浪费的连接仍然浪费资源。脚本运行的时间越长,浪费的连接就越多。我真的不想每次发送服务器请求时都执行 try- except 子句,以便可以在每个 except 部分中使用 del response 来销毁浪费的连接。一定有更好的方法来做到这一点,有人可以帮助我吗?

最佳答案

无论如何,您期望“删除”在这种情况下到底意味着什么?您希望实现什么目标?

Python 具有自动垃圾收集功能。这些对象进一步定义为,只要垃圾收集器开始收集相应的对象,连接就会关闭。

如果您想确保在不再需要该对象时立即关闭连接,可以使用 with 构造。例如:

def CheckSite(Url1, Url2):
    with urllib2.urlopen(Url1) as Response1:
        with urllib2.urlopen(Url2) as Response2:
            # do stuff

关于python - 如何删除 python 脚本中无用的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4634703/

相关文章:

python - python 练习中有些相当棘手的事情

garbage-collection - 为什么垃圾收集如此重要?

python - 从变量 Python (urllib2.urlopen) + Beautifulsoup4 打开链接

python - 非标准图像分析 API 失败,出现 urllib2 错误 : Temporary failure in name resolution

python - 从客户端用Python发出urllib请求

python - 给出一个文件描述符编号,有什么办法知道它的类型吗?

python - Python 中的 Hough 变换 - 结果偏移不正确 - 索引错误?

python : Not getting simple adding result

java - 什么是用于实时系统的良好日志记录库(快速且不创建对象)?

Java:修复内存泄漏