ReactorNotRestartable - Torcido e arranhado
Antes de me vincular a outras respostas relacionadas a isso, observe que eu as li e ainda estou um pouco confuso. Tudo bem, aqui vamos nós.
Então, eu estou criando um webapp no Django. Estou importando a mais recente biblioteca de scrapy para rastrear um site. Não estou usando o aipo (sei muito pouco sobre isso, mas vi em outros tópicos relacionados a isso).
Um dos URLs do nosso site, / crawl /, serve para iniciar a execução do rastreador. É o único URL em nosso site que exige que o scrapy seja usado. Aqui está a função que é chamada quando o URL é visitado:
def crawl(request):
configure_logging({'LOG_FORMAT': '%(levelname)s: %(message)s'})
runner = CrawlerRunner()
d = runner.crawl(ReviewSpider)
d.addBoth(lambda _: reactor.stop())
reactor.run() # the script will block here until the crawling is finished
return render(request, 'index.html')
Você notará que esta é uma adaptação do tutorial complicado no site deles. Na primeira vez em que esse URL é visitado quando o servidor começa a funcionar, tudo funciona conforme o esperado. Na segunda vez e mais, uma exceção ReactorNotRestartable é lançada. Entendo que essa exceção acontece quando um reator que já foi parado recebe um comando para iniciar novamente, o que não é possível.
Observando o código de exemplo, eu assumiria que a linha "runner = CrawlerRunner ()" retornaria um ~ novo ~ reator para uso cada vez que esse URL for visitado. Mas acredito que talvez meu entendimento de reatores trançados não esteja completamente claro.
Como eu poderia obter e executar um NOVO reator cada vez que esse URL é visitado?
muito obrigado