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.conf ファイルを作成した後、supervisord と一緒に使用することをお勧めします。

supervisorctl start cleaner
supervisorctl stop cleaner
于 2012-06-28T10:09:53.390 に答える