Как я могу отложить выполнение задач Сельдерея?

У меня есть небольшой script, который задает задачи для обработки. Этот script делает множество запросов к базе данных, чтобы получить элементы, которые должны быть выставлены в очередь. Проблема, с которой я сталкиваюсь, заключается в том, что работники сельдерея начинают собирать задания, как только они будут помещены в очередь script. Это правильно, и именно так должен работать сельдерей, но это часто приводит к взаимоблокировкам между моими script и работниками сельдерея.

Можно ли запустить все мои задачи из script, но выполнить задержку до тех пор, пока script не завершится или до фиксированной задержки?

Я не мог найти это в документации сельдерея или джанго-сельдерея. Возможно ли это?

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

Ответ 2

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

Затем вы можете создать задачу, и в этой задаче вызовите каждую вашу задачу с помощью .apply(), а не .apply_async() или .delay(). Чтобы эти задачи выполнялись последовательно