运行 没有工人的芹菜任务
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
如何运行所有没有工人的芹菜任务,我的意思是直接调用? 我可以用 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_TASK_ALWAYS_EAGER = False #assync
CELERY_TASK_ALWAYS_EAGER = True #serial