4

我一直在努力使用 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”永远不会运行。当我删除路由并且只有一个默认队列时,我可以让它们运行。我在这里做错了什么,有什么建议吗?

4

1 回答 1

2

我为每个任务创建了特殊的 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
于 2012-06-28T10:09:53.390 回答