Ответ 1
Параметрыeta/countdown позволяют отложить выполнение задачи:
http://docs.celeryproject.org/en/master/userguide/calling.html#eta-and-countdown
У меня есть небольшой script, который задает задачи для обработки. Этот script делает множество запросов к базе данных, чтобы получить элементы, которые должны быть выставлены в очередь. Проблема, с которой я сталкиваюсь, заключается в том, что работники сельдерея начинают собирать задания, как только они будут помещены в очередь script. Это правильно, и именно так должен работать сельдерей, но это часто приводит к взаимоблокировкам между моими script и работниками сельдерея.
Можно ли запустить все мои задачи из script, но выполнить задержку до тех пор, пока script не завершится или до фиксированной задержки?
Я не мог найти это в документации сельдерея или джанго-сельдерея. Возможно ли это?
В качестве быстрого исправления я подумал о добавлении всех элементов, которые будут обработаны в список, и когда мой script выполнит все запросы, я могу просто перебрать список и поставить в очередь задачи. Возможно, это решит проблему, но когда у вас есть тысячи элементов для размещения в очереди, это может быть плохой идеей.
eta/countdown позволяют отложить выполнение задачи:
http://docs.celeryproject.org/en/master/userguide/calling.html#eta-and-countdown
Я думаю, вы пытаетесь избежать условий гонки в своих собственных сценариях, не прося метод задержки выполнения задачи.
Затем вы можете создать задачу, и в этой задаче вызовите каждую вашу задачу с помощью .apply(), а не .apply_async() или .delay(). Чтобы эти задачи выполнялись последовательно