Утечка памяти паука Scrapy с помощью scrapy-deltafetch - PullRequest
0 голосов
/ 11 марта 2019

У меня много пауков-скраперов, и кажется, что моя память только поднимается, но никогда не возвращается назад. Кажется, что у меня есть утечка памяти, при запуске команды консоли telnet я получаю это:

>>> prefs()
Live References

HtmlResponse                       59   oldest: 35s ago
MySpider                            1   oldest: 238s ago
Request                         45942   oldest: 235s ago
Selector                           59   oldest: 34s ago

>>> prefs()
Live References

HtmlResponse                       94   oldest: 35s ago
MySpider                            1   oldest: 301s ago
Request                         79139   oldest: 298s ago
Selector                           93   oldest: 35s ago

Похоже, мои запросы растут с течением времени, но никогда не выпускаются. Я использую scrapy-deltafetch, https://github.com/scrapy-plugins/scrapy-deltafetch, есть ли известная утечка памяти с этим плагином?

Один ответ здесь, Утечка памяти в Scrapy , предложил мне переключить его с LIFO на FIFO, используя эту конфигурацию:

DEPTH_PRIORITY = 1 
SCHEDULER_DISK_QUEUE = 'scrapy.squeue.PickleFifoDiskQueue'
SCHEDULER_MEMORY_QUEUE = 'scrapy.squeue.FifoMemoryQueue'

Однако это, похоже, не решило эту проблему. Ответ действительно предлагал мне использовать JOBDIR, но я бы подумал, потому что я использую scrapy-deltafetch, который должен обрабатывать все это для меня? Вместо этого я установил:

MySpider.custom_settings['DELTAFETCH_DIR'] = 'crawler/name'

Вот мой код:

class MySpider(SitemapSpider):
    custom_settings = {
        'RANDOMIZE_DOWNLOAD_DELAY': True,
        'DOWNLOAD_TIMEOUT': 60,
        'DEPTH_LIMIT': 0,
        'LOG_LEVEL': 'INFO',
        'DELTAFETCH_ENABLED': True,
        'SPIDER_MIDDLEWARES': {
            'scrapy_deltafetch.DeltaFetch': 100,
        },
        'DOWNLOADER_MIDDLEWARES': {
            'rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
            'rotating_proxies.middlewares.BanDetectionMiddleware': 620,
        },
        'ROTATING_PROXY_BAN_POLICY': 'spiders.classes.proxies.policy.MyPolicy',
        'RETRY_HTTP_CODES': [500, 502, 503, 504, 522, 524, 408, 403],
        'ROTATING_PROXY_PAGE_RETRY_TIMES': 10,
        # 'DEPTH_PRIORITY': 1,
        # 'SCHEDULER_DISK_QUEUE': 'scrapy.squeues.PickleFifoDiskQueue',
        # 'SCHEDULER_MEMORY_QUEUE': 'scrapy.squeues.FifoMemoryQueue',
        'TELNETCONSOLE_USERNAME': 'scrapy',
        'TELNETCONSOLE_PASSWORD': '7bkYpew6'
    }

    name = None
    allowed_domains = ['allowed_domains']
    sitemap_urls = ['start_urls']

    def parse(self, response):
        # This is for speed testing
        le = LinkExtractor()
        for link in le.extract_links(response):
            yield response.follow(link.url, self.parse)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...