我最好使用以下示例代码来解释我的问题:
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/