Как выполнять все задачи сельдерея без рабочих, я имею в виду позвонить напрямую? Я могу вызвать задачу с TaskName.run(), но я хочу написать это в конфигурациях, так как это сделать?Выполнение задания сельдерея без работников
2
A
ответ
4
Просто установите CELERY_ALWAYS_EAGER настроек в true, это заставит сельдерей не ставить в очередь задачи и запускать их синхронно в текущем процессе.
Если вы хотите быть в состоянии сделать это на конкретной задаче, вы можете запустить их с применить() или Run(), как вы упомянули, вместо того, чтобы запускать их с apply_async() или задержки().
Так Т.Л., д-р:
CELERY_ALWAYS_EAGER = True
# The following two would do and act the same, processing synchronously
my_task.run()
my_task.delay()
Но
CELERY_ALWAYS_EAGER = False
# These two won't be the same anymore.
my_task.run() # Runs synchronously
my_task.delay() # Passed to the queue and runs Asynchronously, in another process
0
Если я правильно понимаю вас, вы хотите вызвать задачу синхронно.
Просто вызовите метод, как обычно:
TaskName()
Вам только нужно использовать delay
, когда вы хотите, чтобы отправить его работнику.
нормально, но как вы получите возвращаемое значение? это все еще обернуто чем-то другим с помощью сельдерея. – kentor
Нет. Вы все равно можете всегда вызывать метод, назначенный как задачу, так как вы вызываете любой другой метод в python. Сельдерей просто добавляет вызов в очередь, которую может выполнить внешний процесс. Если вам нужно вызвать эту задачу как внутри, так и снаружи сельдерея (и снаружи, я имею в виду синхронно в ходе выполнения сценария без опроса для ответа или чего-то подобного или с использованием любого из асинхронных инструментов), тогда просто назовите его как нормальный. Ничего не нужно. Это еще метод в python, способный возвращать значения и т. Д. –