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