У меня не было этой конкретной проблемы, но у меня была похожая, где мне приходилось избегать применения задач, когда задача того же рода уже выполнялась или находилась в очереди, но без Celery Beat. Я пошел по тому же маршруту, с механизмом блокировки, как ответ, который вы связали здесь. К сожалению, здесь будет не так просто, потому что вы хотите избежать очереди.
Насколько я знаю, Celery не поддерживает ничего подобного из коробки. Я думаю, что вам лучше всего написать собственный планировщик, который наследует от Scheduler
, а затем переписать метод apply_entry
или apply_async
метод . Там вам понадобится механизм блокировки, чтобы проверить, выполняется ли уже задача, то есть в наборе задач и снимите блокировку, а в apply_async
проверьте эту блокировку. Вы можете использовать RedLock , если Redis уже запущен.