我一直在努力使用Celery设置手动路由,但似乎无法将特定任务放入特定队列.以下是我到目前为止所发生的事情:
CELERY_QUEUES = {
"default": {
"binding_key": "default"},
"medium": {
"binding_key": "medium"},
"heavy": {
"binding_key": "heavy"},
}
与定义的路线相似
CELERY_ROUTES = ({ "tasks.some_heavy_task": {
"queue": "heavy",
"routing_key": "tasks.heavy"
}}, )
守护进程开始像
celeryd -l INFO -c 3 -Q heavy
“some_heavy_task”永远不会被运行.当我删除路由并只有一个默认队列时,我可以让它们运行.我在这做错了什么,有什么建议吗?
最佳答案 我为每个任务创建了特殊的celeryconfig文件,所有任务都存储在特殊队列中.
这是一个例子:
CELERY_IMPORTS = ('cleaner_on_celery.tasks',)
CELERYBEAT_SCHEDULE = {
'cleaner': {
"task": "cleaner_on_celery.tasks.cleaner",
"schedule": timedelta(seconds=CLEANER_TIMEOUT),
},
}
CELERY_QUEUES = {
"cleaner": {"exchange": "cleaner", "binding_key": "cleaner"}
}
CELERY_DEFAULT_QUEUE = "cleaner"
from celeryconfig import *
你可以在底部看到:我导入了常见的celeryconfig模块.在这种情况下,您可以启动一些celeryd实例.另外我建议在supervisord中使用它,在为每个任务创建supervisord.conf文件后,您可以轻松地将它们管理为:
supervisorctl start cleaner
supervisorctl stop cleaner