Python Celery手动路由

我一直在努力使用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
点赞