Il mio spider ha una perdita di memoria seria. Dopo 15 minuti di esecuzione la sua memoria 5gb e scrapy dice (usando prefs()) che 900k richiede oggetti e tutto questo. Quale può essere la ragione di questo alto numero di oggetti di richieste viventi? La richiesta sale solo e non va giù. Tutti gli altri oggetti sono vicini allo zero.Perdita di memoria di Scrapy spider
mio ragno si presenta così:
class ExternalLinkSpider(CrawlSpider):
name = 'external_link_spider'
allowed_domains = ['']
start_urls = ['']
rules = (Rule(LxmlLinkExtractor(allow=()), callback='parse_obj', follow=True),)
def parse_obj(self, response):
if not isinstance(response, HtmlResponse):
return
for link in LxmlLinkExtractor(allow=(), deny=self.allowed_domains).extract_links(response):
if not link.nofollow:
yield LinkCrawlItem(domain=link.url)
Qui uscita di preferenze()
HtmlResponse 2 oldest: 0s ago
ExternalLinkSpider 1 oldest: 3285s ago
LinkCrawlItem 2 oldest: 0s ago
Request 1663405 oldest: 3284s ago
Memoria per 100k raschiato pagine possono colpire marchio 40GB su alcuni siti (per esempio a victorinox.com esso raggiungere 35GB di memoria a 100k segnati pagine raschiate). In altri è molto meno.
UPD.
Terzo: il mio codice è limitato a un dominio. Ma il dominio può da qualsiasi. Im impostazione di domini consentiti in modo dinamico, quindi im afferrare solo un dominio alla volta. Per quanto riguarda i biscotti - buon punto. Coda persistente: ho detto a utenti scrapy che sono molto molto lenti con un gran numero di richieste, quindi non è un'opzione :( – Aldarund
Ok, non è stato mostrato nel tuo codice, motivo per cui l'ho menzionato! La coda persistente è lento, però, ed è progettato per sospendere/riprendere le code, credo. La differenza di velocità è in realtà memoria vs disco in questa istanza. – Rejected
Im imposta anche una coda FifoMemoryQueue ma l'oggetto di richiesta più vecchio è quasi vecchio come lo spider Oggetto: non dovrebbe essere elaborato e rilasciato? – Aldarund