Предположим, что все мои задачи в очереди сельдерея работают с сторонним API.Тем не менее, API имеет ограничение по скорости, которое я отслеживаю (есть дневной и часовой ограничения, которые я должен соблюдать).Как только я достигну ограничения скорости, я хочу приостановить потребление новых задач, а затем возобновить, когда узнаю, что у меня все хорошо.
Я достиг этого, используя следующие две задачи:
@celery.task()
def cancel_api_queue(minutes_to_resume):
resume_api_queue.apply_async(countdown=minutes_to_resume*60, queue='celery')
celery.control.cancel_consumer('third_party', reply=True)
@celery.task(default_retry_delay=300, max_retries=5)
def resume_api_queue():
celery.control.add_consumer('third_party', destination=['y@local'])
Затем я могу продолжать отправлять свои сторонние задачи API, и как только мой потребитель будет добавлен обратно, все мои задачи будут использованы.Отлично.
Однако, поскольку у меня нет получателя в этой очереди, этот кажется , что означает, что я больше не могу видеть задания, которые отправляются в Flower (домой потребитель добавляется).
Есть ли что-то, что я делаю не так?Могу ли я добиться этой «паузы» другим способом, позволяющим мне продолжать видеть отправленные задания в цветке?
ps, возможно, это связано с этой проблемой, но не уверен на 100%: https://github.com/celery/celery/issues/1452
Я использую amqp broker, если это имеет значение.
спасибо девочкам и мальчикам.