私のサーバーで実行されている2つの別個のcelerydプロセスがsupervisor
で管理されています。彼らは、次のような別々のキューで待機するように設定されています。セロリタスクを特定のキューにルーティングする
[program:celeryd1]
command=/path/to/celeryd --pool=solo --queues=queue1
...
[program:celeryd2]
command=/path/to/celeryd --pool=solo --queues=queue2
...
そして、私のceleryconfigは次のようなものになります。
from celery.schedules import crontab
BROKER_URL = "amqp://guest:[email protected]:5672//"
CELERY_DISABLE_RATE_LIMITS = True
CELERYD_CONCURRENCY = 1
CELERY_IGNORE_RESULT = True
CELERY_DEFAULT_QUEUE = 'default'
CELERY_QUEUES = {
'default': {
"exchange": "default",
"binding_key": "default",
},
'queue1': {
'exchange': 'queue1',
'routing_key': 'queue1',
},
'queue2': {
'exchange': 'queue2',
'routing_key': 'queue2',
},
}
CELERY_IMPORTS = ('tasks',)
CELERYBEAT_SCHEDULE = {
'first-queue': {
'task': 'tasks.sync',
'schedule': crontab(hour=02, minute=00),
'kwargs': {'client': 'client_1'},
'options': {'queue': 'queue1'},
},
'second-queue': {
'task': 'tasks.sync',
'schedule': crontab(hour=02, minute=00),
'kwargs': {'client': 'client_2'},
'options': {'queue': 'queue1'},
},
}
すべてtasks.sync
タスクは、特定のキュー(したがってceleryd進行)にルーティングする必要があります。しかし、私がsync.apply_async(kwargs={'client': 'value'}, queue='queue1')
で手動でタスクを実行しようとすると、両方のセロリの労働者が仕事を引き受けます。タスクを正しいキューにルーティングするにはどうしたらよいですか?キューにバインドされているワーカーによってのみ実行されますか?