РЕДАКТИРОВАТЬ: Решено! Проблема никак не связана с APScheduler. Код выполнялся как служба в AWS ECS и каждый раз аварийно завершал работу и перезапускался из-за нехватки памяти. Я не заметил, что он разбился и перезапустился, потому что не было исключения (возможно, весь контейнер разбился), поэтому я просто подумал, что выполняются только первые задания.
Я создаю программу в python, которая использует APScheduler для планирования различных заданий.
Код выглядит примерно так:
scheduler = BlockingScheduler()
# Let's say parameters = ['p1', 'p2'...] The real value does not matter
for p in parameters:
scheduler.add_job(func=func1, args=(p,), # Sometimes there is more than on argument
id=f'{p}-func1',
trigger='interval',
minutes=5,
max_instances=1,
misfire_grace_time=60)
# A lot more jobs with function like that: func2, func3...
scheduler.start()
Не для всех функций определены max_instances и misfire_grace_time.
Позже в журналах я вижу намного больше (более чем в 3-4 раза) журналов из первых параметров (p1, p2), чем из последних параметров (p20, p21 ...), хотя они должны быть такими же ( или, по крайней мере, очень близко к нему)
Я подумал, что это может быть связано с количеством рабочих, потому что у меня около 20 параметров и 20 функций, которые могут привести к 400 заданиям, выполняющимся очень близко друг к другу. Поэтому я попытался увеличить его, выполнив:
executors = {
'default': ThreadPoolExecutor(1000),
'processpool': ProcessPoolExecutor(1000)
}
scheduler = BlockingScheduler(executors=executors)
Но я не могу сказать, что это помогло.
Есть ли у кого-нибудь идея, что могло бы повлиять на такое c изменение числа работ, выполняемых для каждого параметра, и что я могу сделать, чтобы это исправить?