2015-02-23 2 views
0

Есть ли способ запретить выполнение двух разных задач одновременно в сельдерей? Я думал об определении новой очереди с уровнем параллелизма = 1 и отправке этих задач в эту очередь, но я не смог найти пример. Это возможно?Как сделать две задачи взаимоисключающими в сельдерее?

Спасибо!

+0

Вы должны были бы реализовать какой-то механизм блокировки. Я сделал это через redis. – user2097159

+0

Я не хотел идти за блокировкой, только если нет другого выхода. – spektom

ответ

1

Да, если вам не нужно беспокоиться об общей пропускной способности, можно создать отдельную очередь и иметь выделенного работника с параллелизмом, установленного в 1. Вы можете создать столько очередей, сколько захотите, и настроить, какой из этих очереди, на которые каждый рабочий получает сообщения.

При запуске работника, вы можете передать параметр -Q, чтобы установить его очереди и параметр -c, чтобы установить, сколько потоков он использует, как описано в разделах Руководства рабочих Queues и Concurrency.

celery -A my_project worker -l info -Q queue1 -c 1

Затем вы можете настроить глобальные отображения, которые определяют, какие очереди каждую задачу переходит к использованию Routing Guide.

CELERY_ROUTES = { 'my_app.tasks.task1': {'queue': 'queue1'}, 'my_app.tasks.task2': {'queue': 'queue2'}, }

В качестве альтернативы, вы можете указать очереди в то время вы передаете каждый экземпляр задачи на основе Calling Tasks Guide.

task1.apply_async(queue='queue1')

Смежные вопросы