python multithreading scrapy scrapy-spider twisted.internet

python - Llamar a Scrapy desde otro archivo sin enhebrar



multithreading scrapy-spider (1)

Tengo que llamar al rastreador desde otro archivo python, para lo cual utilizo el siguiente código.

def crawl_koovs(): spider = SomeSpider() settings = get_project_settings() crawler = Crawler(settings) crawler.signals.connect(reactor.stop, signal=signals.spider_closed) crawler.configure() crawler.crawl(spider) crawler.start() log.start() reactor.run()

Al ejecutar esto, obtengo el error como

exceptions.ValueError: signal only works in main thread

La única solución que pude encontrar es usar

reactor.run(installSignalHandlers=False)

que no quiero usar ya que quiero llamar a este método varias veces y quiero que el reactor se detenga antes de la próxima llamada. ¿Qué puedo hacer para que esto funcione (quizás forzar al rastreador a comenzar en el mismo hilo "principal")?


Lo primero que le diría es que cuando está ejecutando Scrapy desde un archivo externo, el nivel de registro está establecido en INFO, debe cambiarlo a DEPURAR para ver qué sucede si su código no funciona.

debes cambiar la línea:

log.start()

para:

log.start(loglevel=log.DEBUG)

Para almacenar todo en el registro y generar un archivo de texto (para fines de depuración) puede hacer:

log.start(logfile="file.log", loglevel=log.DEBUG, crawler=crawler, logstdout=False)

Acerca del problema de las señales con el nivel de registro cambiado a DEPURAR, tal vez pueda ver alguna salida que pueda ayudarlo a solucionarlo, puede intentar colocar su secuencia de comandos en la carpeta Proyecto de Scrapy para ver si aún se bloquea.

Si cambias la línea:

crawler.signals.connect(reactor.stop, signal=signals.spider_closed)

para:

dispatcher.connect(reactor.stop, signals.spider_closed)

Qué dice ?

Dependiendo de su versión de Scrapy, puede estar en desuso