Сигнал Apscheduler+scrapy работает только в основном потоке

я хочу объединить apscheduler с scrapy. но мой код неверен. Как мне его изменить?

settings = get_project_settings()
configure_logging(settings)
runner = CrawlerRunner(settings)

@defer.inlineCallbacks
def crawl():
    reactor.run()
    yield runner.crawl(Jobaispider)#this is my spider
    yield runner.crawl(Jobpythonspider)#this is my spider
    reactor.stop()

sched = BlockingScheduler()
sched.add_job(crawl, 'date', run_date=datetime(2018, 12, 4, 10, 45, 10))
sched.start()

Ошибка: встроенные.ValueError: сигнал работает только в основном потоке


person 馮推宇    schedule 04.12.2018    source источник


Ответы (1)


На этот вопрос подробно дан ответ здесь: Как интегрировать Flask и Scrapy? где он охватывает множество вариантов использования и идей. Я также нашел одну из ссылок в этой ветке очень полезной: https://github.com/notoriousno/scrapy-flask

Чтобы ответить на ваш вопрос более прямо, попробуйте это. Он использует решение из двух приведенных выше ссылок, в частности, использует библиотеку crochet.

import crochet
crochet.setup()

settings = get_project_settings()
configure_logging(settings)
runner = CrawlerRunner(settings)

# Note: Removing defer here for the example
#@defer.inlineCallbacks

@crochet.run_in_reactor
def crawl():
    runner.crawl(Jobaispider)#this is my spider
    runner.crawl(Jobpythonspider)#this is my spider

sched = BlockingScheduler()
sched.add_job(crawl, 'date', run_date=datetime(2018, 12, 4, 10, 45, 10))
sched.start()
person Raghuveer    schedule 06.11.2020