У меня есть скрипт на python, который проверяет в определенной папке, есть ли изменения. Если быть более точным, я жду новый файл JSON, содержащий часы. Если появляется этот файл JSON, вызывается функция для планирования задачи с помощью библиотеки расписаний.
Созданная задача запускает паука в назначенный час.
Проблема заключается в том, что в моем файле JSON несколько часов Один и тот же паук вызывается несколько раз (столько раз, сколько у нас строк в файле JSON), и программа вызывает ошибку ReactorNotRestartable. Паук вызывается из строки schedule.run_pending
.
Я почти уверен, что проблема связана с несколькими вызовами одного и того же паука, потому что программа выполняет первый этап очистки (первый час с первым URL), но не работает для второго.
Я не знаю, как я могу решить эту проблему с реактором, можете ли вы дать мне какие-то комментарии?
Модуль Watchdogs для мониторинга хранилища
try:
#get json hours
hours = get_all_starting_hours('../data/output/result_debut.json')
logger.info(hours)
#get json urls
urls = get_all_urls('../data/output/result_debut.json')
logger.info(urls)
for hour, url in zip(hours, urls):
#schedule pour chaque url la tâche pour l'heure donnée
logger.info(hour)
logger.info(url)
# schedule scraping task
schedule.every().day.at(str(hour)).do(job_that_executes_once, url, process_settings=None)
while True:
logger.info('dans le while')
#run scheduled task
schedule.run_pending()
time.sleep(1)
except Exception as e:
logger.debug(str(e))
Расписание
def job_that_executes_once(url, process_settings):
logger.add("../data/logs/schedule_{time}.log")
logger.info('job a été lancé')
#run spider
run_MySpider(url)
return schedule.CancelJob
Паук
class MySpider(scrapy.Spider):
name = "enchere_detail"
logger.add('../data/logs/Spider_{time}.log')
def __init__(self, **kwargs):
super(MySpider, self).__init__(**kwargs)
self.start_urls = [kwargs.get('url_start')]
logger.info(self.start_urls)
def parse(self, response):
logger.info('debut du parse')
yield{
'fin_vente': response.css('span.stats-heure-fin::text').get(),
'url' : response.url
}
def run_MySpider(url):
process.crawl(MySpider, url_start = url)
process.start()
Ошибка
line 754, in startRunning
raise error.ReactorNotRestartable()
twisted.internet.error.ReactorNotRestartable
Спасибо