没有工人运行芹菜任务

时间:2016-09-16 03:55:34

标签: django asynchronous celery django-celery

如何在没有工人的情况下运行所有​​芹菜任务,我的意思是直接打电话? 我可以用TaskName.run()调用任务,但我想在配置中写这个,那么如何制作呢?

3 个答案:

答案 0 :(得分:4)

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

如果您希望能够按特定任务执行此操作,则可以使用 apply() run()运行它们,而不是运行它们 apply_async()延迟()

所以tl;博士:

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

答案 1 :(得分:0)

如果我理解你,你想同步调用任务。

只需按正常方式调用该方法:

TaskName() 

如果要将delay发送给工作人员,则只需使用$ curl -X POST -H 'Authorization: Basic dGVzdGNsaWVudDpzZWNyZXQ=' -d 'grant_type=password&username=test&password=test' localhost:3000/oauth/token { "token_type":"bearer", "access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiVlx1MDAxNcKbwoNUwoonbFPCu8KhwrYiLCJpYXQiOjE0NDQyNjI1NDMsImV4cCI6MTQ0NDI2MjU2M30.MldruS1PvZaRZIJR4legQaauQ3_DYKxxP2rFnD37Ip4", "expires_in":20, "refresh_token":"fdb8fdbecf1d03ce5e6125c067733c0d51de209c" }

答案 2 :(得分:0)

为补充SpiXel的回答,从this answer起,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