Процесс Work-Horse был неожиданно прерван RQ и Scrapy

Я пытаюсь получить функцию из redis (rq), которая генерирует CrawlerProcess, но я получаю

Процесс рабочей лошади был неожиданно прерван (waitpid вернул 11)

журнал консоли:

Перемещение задания в очередь с ошибками (рабочая лошадка неожиданно прервана; waitpid вернул 11)

в строке, которую я пометил комментарием

ЭТА СТРОКА УБИВАЕТ ПРОГРАММУ

Что я делаю неправильно? Как я могу это исправить?

Эту функцию я хорошо извлекаю из RQ:

def custom_executor(url):
    process = CrawlerProcess({
        'USER_AGENT': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36",
        'DOWNLOAD_TIMEOUT': 20000,  # 100
        'ROBOTSTXT_OBEY': False,
        'HTTPCACHE_ENABLED': False,
        'REDIRECT_ENABLED': False,

        'SPLASH_URL': 'http://localhost:8050/',
        'DUPEFILTER_CLASS': 'scrapy_splash.SplashAwareDupeFilter',
        'HTTPCACHE_STORAGE': 'scrapy_splash.SplashAwareFSCacheStorage',

        'DOWNLOADER_MIDDLEWARES': {
            'scrapy_splash.SplashCookiesMiddleware': 723,
            'scrapy_splash.SplashMiddleware': 725,
            'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
        },

        'SPIDER_MIDDLEWARES': {
            'scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware': True,
            'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': True,
            'scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware': True,
            'scrapy.extensions.closespider.CloseSpider': True,

            'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
        }
    })

    ### THIS LINE KILL THE PROGRAM
    process.crawl(ExtractorSpider, 
                   start_urls=[url, ], es_client=es_get_connection(),
                   redis_conn=redis_get_connection()) 

    process.start()

а это мой ExtractorSpider:

class ExtractorSpider(Spider):
    name = "Extractor Spider"
    handle_httpstatus_list = [301, 302, 303]

    def parse(self, response):
        yield SplashRequest(url=url, callback=process_screenshot,
                            endpoint='execute', args=SPLASH_ARGS)

Спасибо


person Ami Hollander    schedule 07.11.2017    source источник
comment
Как я узнал со временем и большим количеством сбоев процесса, это вызвано тяжелыми вычислениями и нехваткой памяти. После увеличения памяти работает нормально.   -  person Ami Hollander    schedule 15.12.2017


Ответы (2)


Процесс завершился сбоем из-за тяжелых вычислений при нехватке памяти. Увеличение объема памяти устранило эту проблему.

person Ami Hollander    schedule 29.01.2018
comment
Как ты увеличил объем памяти? Есть ли варианты для python-rq? - person Hyunwoo; 10.01.2019
comment
@Hyunwoo, это зависит от среды, которую вы используете. Я использовал pycharm для выполнения программы, поэтому увеличение Pycharm с помощью Edit Custom VM Options помогло - person Ami Hollander; 10.01.2019
comment
Я выполнял через терминал, так что может не та же проблема с вами. Спасибо - person Hyunwoo; 10.01.2019
comment
Моя программа работала, когда мы использовали gunicorn, но когда мы вводили rq для отслеживания статуса задания, мы получали ту же ошибку. Итак, ясно, что до rq. Может быть, rq резервирует для себя небольшую память и обрабатывает только ее, тогда как в Gunicorn все, что было доступно для ЦП? Что еще более важно, как увеличить это на терминале Linux, как предложено обоими пользователями? - person Problem_Solver23; 02.06.2021
comment
Я пошел на помощь - ›изменил настройки памяти в Pycharm, увеличил их до 4000, и это прекратилось .: jetbrains.com/help/pycharm/increasing-memory-heap.html - person mLstudent33; 10.06.2021
comment
Фактически он остановился на один заход и снова вернулся. - person mLstudent33; 10.06.2021
comment
проверьте, сколько памяти нужно вашему процессу - person Ami Hollander; 11.06.2021

Для меня время ожидания процесса истекло, пришлось изменить время ожидания по умолчанию

person Nathan SSSSSS    schedule 06.05.2020
comment
Как ты это делаешь? - person mLstudent33; 10.06.2021