#python #cron #scrapy #job-scheduling #fastapi
#python #cron #scrapy #планирование заданий #fastapi
Вопрос:
Я хочу запланировать выполнение сканера, где частота будет основываться на вводе пользователя во внешнем интерфейсе. Это означает, что мне нужно поддерживать контроль выполнения Scrapy ( scrapy crawl xbot
) в серверной части и соответствующим образом изменять частоту планировщика. И, основываясь на статусе выполнения сканера, мне нужно будет запускать функции для ежедневного обновления базы данных.
Я создал MVP с использованием FastAPI, но задание scrapy в настоящее время выполняется независимо в контейнере docker с фиксированной частотой и записывается в БД. Серверная часть, работающая в другом контейнере, обрабатывает базу данных.
Если я использую сценарии оболочки для запуска заданий cron для команды scrapy и команд функций python, как мне изменить частоту заданий cron? Если я использую пакеты python scheduler / crontab, как мне изменить частоту на основе пользовательского ввода и проверить статус выполнения задания scrapy?
Любые предложения были бы полезны!
ETA: я планирую предоставить команду сканера через API. Серверная часть будет содержать модуль планировщика, который будет вызывать API, а затем синхронно вызывать зависимые фоновые задания. Другие задания, которые не зависят от выполнения сканера, будут выполняться независимо. Единственной проблемой сейчас является изменение частоты при вводе пользователем.
Может быть, я могу ограничить его пользовательскими частотами, такими как «Один раз в определенную дату и время», «Каждый альтернативный день в X время», «Ежедневно в X время», «Каждую неделю в Y день в X время», …. и так далее, и написать конкретные функции для каждого. Например, schedule.every().day.at(X_time).do(job)
, если … еще (7 сравнений), например if 'thursday': schedule.every().thursday.at(X_time).do(job)
, …
Комментарии:
1. Не уверен, можете ли вы предоставить API, но если можете, должен сработать простой веб-сервер на python-flask, который предоставляет API, который изменяет crontab?
2. Другим решением было бы использовать faust.readthedocs.io/en/latest . Он изначально поддерживает задания cron, см. faust.readthedocs.io/en/latest/userguide/tasks.html#cron-jobs … хотя я не уверен, разрешено ли пользователю изменять время выполнения задания cron..
3. Вероятно, вам лучше всего использовать APScheduler ( apscheduler.readthedocs.io/en/stable )