APScheduler имеет льготный период, во время которого рабочие места разрешены для запуска. Если по какой-либо причине планировщик занят и/или загрузка хоста слишком высока, APScheduler может не запустить задание вовремя.
В этом случае задание будет отброшено, если оно не может быть запущено в течение льготного времени (пояснительное сообщение будет зарегистрировано, если вы инициализировали ведение журнала Python).
В зависимости от фактической первопричины:
- Если планировщик не удался запланировать работу во время, вы можете использовать
misfire_grace_time=None
сказать APScheduler планировать работу, как только он может вместо того, чтобы отказаться его.
- По умолчанию разрешается запускать только один экземпляр каждого задания одновременно. Убедитесь, что предыдущий запуск завершен. Можно установить максимальное количество экземпляров для определенного задания, которое планировщик будет запускать одновременно, используя аргумент ключевого слова
max_instances
при добавлении задания. В этом случае вам также может понадобиться использовать coalesce=False
. Делайте это только в том случае, если задание занимает больше 24 часов (в вашем случае), и вы соглашаетесь, что два экземпляра вашей работы могут выполняться одновременно.
- Если было слишком много заданий, но загрузка машины была не слишком высокой, это означает, что у вас есть больше заданий, чем то, что вы можете запускать одновременно. Вы можете попытаться увеличить размер пула потоков, который выполняет APScheduler , исполнитель используется для запуска заданий (это зависит от вашей настройки, проверьте: http://apscheduler.readthedocs.org/en/latest/userguide.html).
В заключение, я бы сначала попробовать с misfire_grace_period
:
@Nightlysched.scheduled_job('cron', hour=9, misfire_grace_time=None)
Как примечание, хотя, как @Alex упоминал, что я не понять, почему ваш код работает, потому что вызов должен Nightlysched.start()
блокировать и препятствовать запуску вашего веб-приложения. Я предполагаю, что это вставленный код и на самом деле не представляет то, что вы используете. Для меня похоже, что вместо этого вы должны использовать неблокирующий планировщик, например BackgroundScheduler.
Я не могу понять, как этот код работает вообще. Nightlysched.start() блокирует и не позволяет вашему веб-приложению запускаться. Тем не менее, конфигурация верна. Включите ведение журнала отладки (установите loglevel «apscheduler» в DEBUG), чтобы выяснить, что происходит. –
После запуска планировщика (Nightlysched.start()) он запускает веб-приложение, как ожидалось. Не могли бы вы рассказать мне, как установить loglevel apstcheduler? Я пробовал несколько вещей, но это не сработало. Спасибо – ashishashen