我尝试了文档中的示例http://doc.scrapy.org/en/stable/topics/practices.html,但第二次运行ReactorNotRestartable时会出现错误。
settings = get_project_settings()
runner = CrawlerRunner(settings=settings)
@defer.inlineCallbacks
def crawl():
yield runner.crawl(LatestNewsSpider)
reactor.stop()
def run_spider():
crawl()
reactor.run()
在Celery设置中将CELERYD_MAX_TASKS_PER_CHILD
设置为1。这将在每个子进程中只运行一个任务,因此在同一进程中永远不会启动反应器一次以上。
或者,你可以在一个线程中运行reactor,永远不要停止它。我不知道它是否有效。钩针可能有用。