web-dev-qa-db-fra.com

le signal ne fonctionne que dans le thread principal

je suis nouveau à Django. J'essaie d'exécuter mon araignée tremblante à travers Django. Mon code tremblant fonctionne parfaitement lorsque je lance l'invite de commande. Mais quand j'essaye de l'exécuter sur Django = il échoue Le message d'erreur: le signal ne fonctionne que dans le thread principal.

mon code dans la vue Django (Ce qui suit)

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()

Veuillez m'aider à résoudre ce problème. Merci

16
Jijo

l'erreur indique essentiellement que vous n'êtes pas dans un thread principal, donc le signal n'est pas traité.

le passage de CrawlerProcess à CrawlerRunner a résolu le problème pour moi (je suppose que dans CrawlerRunner vous êtes dans le thread principal) http://doc.scrapy.org/en/latest/topics/api.html#scrapy.crawler. CrawlerRunner

j'espère que cela vous aide

2
Tigrou