Scrapy - 设置延迟重试中间件

问题描述 投票:0回答:1

我正在使用Scrapy-splash,我的内存有问题。我可以清楚地看到docker python3使用的记忆逐渐增加,直到PC冻结。

无法弄清楚为什么它的行为如此,因为我有CONCURRENT_REQUESTS=3并且没有办法3 HTML消耗10GB RAM。

因此,有一种解决方法可以将maxrss设置为合理的值。当RAM使用具有此值时,将重新启动docker以刷新RAM。

但问题是,在docker下降的时候,scrapy继续发送请求所以有几个urls没有刮。重试中间件正试图立即重试这些请求然后放弃。

[scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://www.ex.com/eiB3t/ via http://127.0.0.1:8050/execute> (failed 2 times): [<twisted.python.failure.Failure twisted.internet.error.ConnectionDone: Connection was closed cleanly.>]
2019-03-30 14:28:33 [scrapy.downloadermiddlewares.retry] DEBUG: Gave up retrying <GET https://www.ex.com/eiB3t/

所以我有两个问题

  1. 你知道更好的解决方案吗?
  2. 如果没有,我怎么能在一段时间后将Scrapy设置为retry请求(让我们说分钟,所以docker有时间重启)?
python docker scrapy splash
1个回答
0
投票
  1. 更复杂的解决方案可能是设置一个Kubernetes集群,其中运行多个副本。这样您就可以避免只有一个容器发生故障而影响您的抓取工作。
  2. 我认为仅为重试配置等待时间并不容易。您可以使用DOWNLOAD_DELAY(但这会影响所有请求之间的延迟),或将RETRY_TIMES设置为高于默认值2的值。
© www.soinside.com 2019 - 2024. All rights reserved.