使用代理与python请求

时间:2016-03-16 21:41:23

标签: python proxy python-requests

我正在编写一个使用多个代理的爬虫,基本上(我有一个经过验证的代理池)在一个进程中,我启动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),但突然它刚刚停止而没有错误,是否有可能它被杀死了核心?我在哪里可以查看?

1 个答案:

答案 0 :(得分:0)

正如Cory Shay在评论中提到的,response.close()将关闭连接,但响应的内容仍然可用。