2016-10-30 4 views
2

У меня есть сервер, на котором работает Celery с RabbitMQ. Но когда я пытаюсь отправить задачи с помощью send_task, он просто возвращается с объектом AsyncResult.
Но фактическая задача не работает (даже если рабочие и очереди пусты)Сельдерей send_task не отправляет задачи

c = Celery("tasks", broker="amqp://[email protected]//") 
c.send_task("tasks.printing.test_print", (100), queue="print_queue", routing_key="printing.test_print") 

Моя конфигурация сельдерей:

CELERY_QUEUES = (
    Queue('default', routing_key='task.#'), 
    Queue('print_queue', routing_key='printing.#'), 
) 
CELERY_DEFAULT_EXCHANGE = 'tasks' 
CELERY_ROUTES = { 
     'tasks.printing.test_print': { 
     'queue': 'print_queue', 
     'routing_key': 'printing.test_print', 
    }} 
BROKER_URL = 'amqp://' 

исполняет только одного работника:

celery -A celerymain worker --loglevel=debug 

Это его первоначальный журнал:

- ** ---------- [config] 
- ** ---------- .> app:   __main__:0x7eff96903b50 
- ** ---------- .> transport: amqp://guest:**@localhost:5672// 
- ** ---------- .> results:  amqp:// 
- *** --- * --- .> concurrency: 4 (prefork) 
-- ******* ---- 
--- ***** ----- [queues] -------------- .> default   exchange=tasks(topic) key=task.# 
       .> print_queue  exchange=tasks(topic) key=printing.# 

[tasks] . test_print 

Это задача:

class test_print(Task): 

    name = "test_print" 

    def run(self,a): 
     log.info("running") 
     print a 

RabbitMQ очереди «print_queue» остается пустым, и нет ничего нового в журналах RabbitMQ.
У меня есть свободное место на 4 ГБ, поэтому это не проблема с дисковым пространством.

В чем проблема?

ответ

2

Я решил проблему, удалив параметр routing_key из send_task.
Я не знаю, почему это было проблемой, но по крайней мере это работает

-1
@app.task(name="test_print") 
class test_print(Task): 

    name = "test_print" 

    def run(self,a): 
     log.info("running") 
     print a 
+3

Что вы пытаетесь сказать? – Drxxd

Смежные вопросы