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

questionAnswers(1)

yourAnswerToTheQuestion