scrapy 2.3 内存泄漏的常见原因

2021-06-17 11:14 更新

Scrapy开发人员传递请求中引用的对象(例如,使用 ​cb_kwargs​ 或 ​meta​ 属性或请求回调函数),它有效地将这些引用对象的生存期限制为请求的生存期。到目前为止,这是导致零碎项目内存泄漏的最常见原因,对于新手来说,这是一个很难调试的原因。

在大型项目中,蜘蛛通常是由不同的人编写的,其中一些蜘蛛可能会“泄漏”,从而在其他(写得好的)蜘蛛同时运行时影响其他蜘蛛,而这反过来又会影响整个爬行过程。

如果您没有正确地释放(以前分配的)资源,那么泄漏也可能来自您编写的定制中间件、管道或扩展。例如,在上分配资源 ​spider_opened​ 但不释放它们 ​spider_closed​ 如果你跑步,可能会引起问题 multiple spiders per process .

请求太多?

默认情况下,scrapy将请求队列保存在内存中;它包括 ​Request​ 对象和请求属性中引用的所有对象(例如 ​cb_kwargs​ 和 ​meta​ )虽然不一定是泄漏,但这可能会占用大量内存。有可能 persistent job queue 有助于控制内存使用。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号