У меня есть паук Scrapy, завернутый в Django, и для его программного запуска я использую scrapyscript, который использует бильярдные очереди и процессы для запуска Scrapy. Я знаю, что это странная настройка, но мне нужен паук, который может запускаться cron и работать с django orm. Кроме того, все работает отлично, я получаю данные, очищенные, я могу запустить их программно, но одно отстой: паук застревает и выполнение кода ждет вечно.
# start.py
cmd = ['C:\\PycharmProjects\\...\\start.bat', ]
subprocess.call(cmd)
# start.bat
python C:\\...\\manage.py runserver --noreload
# urls.py
from my_app.myFile import MyClass
c = MyClass()
# myFile.py
class MyClass(object):
def __init__(self):
githubJob = Job(ScrapOnePage, url='some/url')
processor = Processor(settings=None)
data = processor.run(githubJob)
print(data)
ScrapOnePage работает отлично, нет необходимости покажи это, это делает работу. Проблема в процессоре, почему-то после произнесения «паук закрыт» не пропускает go и не переходит на другую строку. Печать (данные) никогда не происходит, независимо от того, как долго я жду. Это то, что висит навсегда:
2020-01-05 22:27:29 [scrapy.core.engine] INFO: Closing spider (finished)
2020-01-05 22:27:29 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 1805,
'downloader/request_count': 4,
'downloader/request_method_count/GET': 4,
'downloader/response_bytes': 5933,
'downloader/response_count': 4,
'downloader/response_status_count/200': 1,
'downloader/response_status_count/301': 3,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2020, 1, 5, 21, 27, 29, 253634),
'log_count/DEBUG': 5,
'log_count/ERROR': 1,
'log_count/INFO': 7,
'response_received_count': 1,
'scheduler/dequeued': 4,
'scheduler/dequeued/memory': 4,
'scheduler/enqueued': 4,
'scheduler/enqueued/memory': 4,
'spider_exceptions/IndexError': 1,
'start_time': datetime.datetime(2020, 1, 5, 21, 27, 28, 275290)}
2020-01-05 22:27:29 [scrapy.core.engine] INFO: Spider closed (finished)
Как уже говорилось, работа выполнена, и я могу поместить в процесс несколько пауков, и все они работают нормально. Но процесс никогда не останавливается. Я мог убить сервер django с помощью kill pid, но мне очень не понравилось это решение (также потому, что я не уверен, что оно убивает также паука, бегущего внутри django).
Пожалуйста, любое улучшение, более простой подход, любые намеки, как заставить паука позволить go? Заранее спасибо.