运行 没有工人的芹菜任务

Run celery task without workers

如何运行所有没有工人的芹菜任务,我的意思是直接调用? 我可以用 TaskName.run() 调用任务,但是我想在配置中写这个,那么如何实现呢?

如果我没理解错的话,你想同步调用任务。

正常调用方法即可:

TaskName() 

你只需要在你想发送给工作人员时使用delay

只需将 CELERY_ALWAYS_EAGER 设置为 true,这将强制 celery 不对任务进行排队,并 运行 它们在当前进程中同步。

如果您希望能够针对特定任务执行此操作,您可以 运行 使用 apply()运行 ]() 正如你提到的,而不是 运行 使用 apply_async()delay().

所以 tl;dr:

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

为了补充 SpiXel 的回答,从 开始,CELERY_ALWAYS_EAGER 在 4.0+ 版本中已重命名为 CELERY_TASK_ALWAYS_EAGER。使用 Django 1.11+Celery 4.1.0 为我工作。所以...

CELERY_TASK_ALWAYS_EAGER = False #assync
CELERY_TASK_ALWAYS_EAGER = True #serial