扭曲的电抗器无法重启。解决方法是让celery任务为你要执行的每个爬网派生一个新的子进程,如以下文章中所建议:
通过使用该
multiprocessing程序包可以解决“反应器无法重新启动”的问题。但是这样做的问题是,由于你将遇到另一个问题,即守护进程无法生成子进程,因此最新的celery版本现在已解决该解决方法。因此,为了使解决方法起作用,你需要使用celery版本。
是的,
scrapyAPI已经更改。但进行了较小的修改(
import Crawler而不是
CrawlerProcess)。你可以通过关闭Celery版获得解决方法。
这是我更新的抓取脚本,可通过billiard代替来使用较新的celery版本multiprocessing:
from scrapy.crawler import Crawlerfrom scrapy.conf import settingsfrom myspider import MySpiderfrom scrapy import log, projectfrom twisted.internet import reactorfrom billiard import Processfrom scrapy.utils.project import get_project_settingsclass UrlCrawlerscript(Process): def __init__(self, spider): Process.__init__(self) settings = get_project_settings() self.crawler = Crawler(settings) self.crawler.configure() self.crawler.signals.connect(reactor.stop, signal=signals.spider_closed) self.spider = spider def run(self): self.crawler.crawl(self.spider) self.crawler.start() reactor.run()def run_spider(url): spider = MySpider(url) crawler = UrlCrawlerscript(spider) crawler.start() crawler.join()
编辑:通过阅读celery问题#1709,他们建议使用台球而不是多进程,以便解除子进程限制。换句话说,我们应该尝试一下台球,看看它是否有效!
编辑2:是的,通过使用台球,我的脚本适用于最新的celery版本!看到我更新的脚本。



