芹菜工人不接收广播任务

时间:2020-10-31 16:49:07

标签: python celery

我有一个简单的celery + django设置,可以正常工作,直到将Queue更改为Broadcast,而不是所有工人都没有完成任务,而他们都没有。

from __future__ import absolute_import, unicode_literals

import os

from kombu.common import Broadcast
from billiard import current_process
from celery import Celery
from kombu import Queue


# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celery_tutorial.settings')

app = Celery('celery_tutorial')

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')
# exchange = Exchange('custom_exchange', type='fanout')
# app.conf.task_queues = (Broadcast('broadcast_tasks'),)
app.conf.task_queues = (Queue('broadcast_tasks'),)

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()

app.conf.task_routes = {
    'tasks.debug_task': {
        'queue': 'broadcast_tasks',
        'exchange': 'broadcast_tasks'
    }
}

@app.task(bind=True)
def debug_task(self):
    print(f'worker id: {current_process().index}')

现在,当我提交任务时,它可以正常工作:

from celery_tutorial.celery import debug_task

debug_task.apply_async(queue='broadcast_tasks')

工人日志:

[2020-10-31 16:44:50,770:警告/ ForkPoolWorker-2]工人ID:1

如果我将Queue更改为Broadcast,将不会在工作日志中显示任何内容。

(我以celery -A celery_tutorial.celery worker -c 2 -Q broadcast_tasks经营工人)

PS:我将redis切换为amqp,现在其中一名工作人员获得了任务,而第二名则没有。

0 个答案:

没有答案