我正在编写一个使用多个代理的爬虫,基本上(我有一个经过验证的代理池)在一个进程中,我启动30个线程,每个随机选择一个代理并使用它来获取一些url我设置每个请求的超时时间为30秒。 但是,运行一段时间后,我得到了打开太多文件的错误,我猜有些连接未关闭? 如果我不使用具有相同线程数的代理,则不存在此类错误。 有人可以帮忙吗?
代码起始线程:
...
# the queue of url for request
queue.add_url(url)
for i in range(numOfThreads):
x = crawlerThread(...)
threadList.append(x)
x.start()
time.sleep(30)
...
抓取代码:
while currentUrl:
# different sessions use different ip of the servers
sessionId = (sessionId+1) % len(self.sessions)
try:
session, proxy = self.random_use_ip_session_proxy(sessionId)
if proxy:
# if proxy is not None, use proxy, otherwise use my own ip, returned proxy is list of two elements,
# the first one is proxy, second one is for counting
response = session.get(currentUrl, timeout=60, verify=False, proxies=proxy[0])
else:
response = session.get(currentUrl, timeout=60, verify=False)
except Exception as e:
# some error handling
... # analyze the code and produce more url
现在该程序没有报告过多的打开文件错误(我仍然看到套接字连接的数量迅速增长到10000),但突然它刚刚停止而没有错误,是否有可能它被杀死了核心?我在哪里可以查看?
答案 0 :(得分:0)
正如Cory Shay在评论中提到的,response.close()将关闭连接,但响应的内容仍然可用。