垃圾停止请求但处理响应

2024-04-19 10:30:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我和很多蜘蛛有一个很糟糕的计划。有一个服务器端的解决方案可以重启HMA VPN以更改接口IP(这样我们就可以得到不同的IP,并且不会被阻塞)。在

有一个定制的下载中间件,它为每个请求和响应发送相应的套接字消息,以便服务器端解决方案能够触发VPN重启。显然,当VPN即将重启时,Scrapy不能产生任何新的请求——我们通过拥有一个锁文件来控制它。然而,Scrapy必须在VPN重新启动之前处理所有尚未收到的响应。在

sleep放在下载中间件中可以完全停止Scrapy。有没有一种方法可以处理响应,但推迟新的请求(直到锁文件被删除)?在

显然,当产生超过1x个并发请求时,就是这种情况。在

使用以下中间件代码:

class CustomMiddleware(object):

    def process_request(self, request, spider):
        while os.path.exists(LOCK_FILE_PATH):
            time.sleep(10)

        # Send corresponding socket message("OPEN")

    def process_response(self, request, response, spider):
        # Send corresponding socket message("CLOSE")
        return response

Tags: 中间件文件selfipsendresponserequestdef