web-dev-qa-db-ja.com

シグナルはメインスレッドでのみ機能します

私はDjangoが初めてです。 Djangoビューでスクレイピースパイダーを実行しようとしています。コマンドプロンプトを実行すると、私のスクレイピーコードは完全に機能します。しかし、Djangoで実行しようとすると失敗します。エラーメッセージ:シグナルはメインスレッドでのみ機能します。

Djangoビューのコード(以下)

from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy.crawler import CrawlerProcess
from scrapy import log, signals
from Working.spiders.workSpider import WorkSpider
from scrapy.settings import Settings
from scrapy.utils.project import get_project_settings

spider = WorkSpider(domain='scrapinghub.com')
crawler = CrawlerProcess(Settings())
crawler.start()
crawler.signals.connect(reactor.stop, signal=signals.spider_closed)
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
reactor.run()

これを解決するのを手伝ってください。ありがとうございました

16
Jijo

エラーは基本的に、メインスレッドにいないため、シグナルが処理されないことを示しています。

crawlerProcessからCrawlerRunnerに切り替えることで問題が解決しました(CrawlerRunnerではメインスレッドにいると思います) http://doc.scrapy.org/en/latest/topics/api.html#scrapy.crawler。 CrawlerRunner

これがあなたを助けることを願っています

2
Tigrou