Api: Django с Api-Rest и Scrapy [ValueError: сигнал работает только в основном потоке главного интерпретатора]
Я пытаюсь вернуть словарь с помощью Api, этот словарь заполняется скриптом Scrapy
from rest_framework.views import APIView
from django.shortcuts import HttpResponse
from scrapy.crawler import CrawlerProcess
from scrapyProject.spiders.spider import ProductoSpider, outputResponse
class Prueba(APIView):
def post(self, request):
dato = request.data['dato']
if dato == 'dato':
datos = []
process = CrawlerProcess({
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})
process.crawl(ProductoSpider)
process.start()
datos = outputResponse
return HttpResponse(datos)
else:
return HttpResponse("Adios", content_type='application/json')
Это просто эксперимент. "outputResponse" является глобальной переменной в моем пауке, и я уже проверил, что информация сохраняется правильно с помощью этого:
from scrapy.crawler import CrawlerProcess
from spiders.spider import ProductoSpider, outputResponse
def execute():
process = CrawlerProcess({
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})
process.crawl(ProductoSpider)
process.start()
return outputResponse
print (execute())
Этот скрипт работает, но когда я хочу попробовать Api, выполняя "POST" в postman, я получаю следующее:
Internal Server Error: /api/experimento
Traceback (most recent call last):
File "C:\Users\Duvan Requena\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\Duvan Requena\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Duvan Requena\AppData\Local\Programs\Python\Python39\lib\site-packages\django\views\decorators\csrf.py",
line 54, in wrapped_view
return view_func(*args, **kwargs)
File "C:\Users\Duvan Requena\AppData\Local\Programs\Python\Python39\lib\site-packages\django\views\generic\base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\Duvan Requena\AppData\Local\Programs\Python\Python39\lib\site-packages\rest_framework\views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "C:\Users\Duvan Requena\AppData\Local\Programs\Python\Python39\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "C:\Users\Duvan Requena\AppData\Local\Programs\Python\Python39\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
raise exc
File "C:\Users\Duvan Requena\AppData\Local\Programs\Python\Python39\lib\site-packages\rest_framework\views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "D:\Sistemas\Django\quaesitor\quaesitorApi\api.py", line 22, in post
process = CrawlerProcess({
File "C:\Users\Duvan Requena\AppData\Local\Programs\Python\Python39\lib\site-packages\scrapy\crawler.py", line 281, in __init__
install_shutdown_handlers(self._signal_shutdown)
File "C:\Users\Duvan Requena\AppData\Local\Programs\Python\Python39\lib\site-packages\scrapy\utils\ossignal.py", line 19, in install_shutdown_handlers
reactor._handleSignals()
File "C:\Users\Duvan Requena\AppData\Local\Programs\Python\Python39\lib\site-packages\twisted\internet\posixbase.py", line 341, in _handleSignals
_SignalReactorMixin._handleSignals(self)
File "C:\Users\Duvan Requena\AppData\Local\Programs\Python\Python39\lib\site-packages\twisted\internet\base.py", line 1281, in _handleSignals
signal.signal(signal.SIGINT, reactorBaseSelf.sigInt)
File "C:\Users\Duvan Requena\AppData\Local\Programs\Python\Python39\lib\signal.py", line 47, in signal
handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
ValueError: signal only works in main thread of the main interpreter
[04/Feb/2022 13:52:23] "POST /api/experimento HTTP/1.1" 500 110399
=====================