scrapy 2.3 內(nèi)存泄漏的常見(jiàn)原因

2021-06-17 11:14 更新

Scrapy開(kāi)發(fā)人員傳遞請(qǐng)求中引用的對(duì)象(例如,使用 ?cb_kwargs? 或 ?meta? 屬性或請(qǐng)求回調(diào)函數(shù)),它有效地將這些引用對(duì)象的生存期限制為請(qǐng)求的生存期。到目前為止,這是導(dǎo)致零碎項(xiàng)目?jī)?nèi)存泄漏的最常見(jiàn)原因,對(duì)于新手來(lái)說(shuō),這是一個(gè)很難調(diào)試的原因。

在大型項(xiàng)目中,蜘蛛通常是由不同的人編寫(xiě)的,其中一些蜘蛛可能會(huì)“泄漏”,從而在其他(寫(xiě)得好的)蜘蛛同時(shí)運(yùn)行時(shí)影響其他蜘蛛,而這反過(guò)來(lái)又會(huì)影響整個(gè)爬行過(guò)程。

如果您沒(méi)有正確地釋放(以前分配的)資源,那么泄漏也可能來(lái)自您編寫(xiě)的定制中間件、管道或擴(kuò)展。例如,在上分配資源 ?spider_opened? 但不釋放它們 ?spider_closed? 如果你跑步,可能會(huì)引起問(wèn)題 multiple spiders per process .

請(qǐng)求太多?

默認(rèn)情況下,scrapy將請(qǐng)求隊(duì)列保存在內(nèi)存中;它包括 ?Request? 對(duì)象和請(qǐng)求屬性中引用的所有對(duì)象(例如 ?cb_kwargs? 和 ?meta? )雖然不一定是泄漏,但這可能會(huì)占用大量?jī)?nèi)存。有可能 persistent job queue 有助于控制內(nèi)存使用。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)