2015-05-07 1 views
2

мы используем Redis в качестве нашего результирующего бэкэнда. Однако для одной задачи мы хотели бы переопределить это, чтобы вместо этого использовать RabbitMQ.Как переопределить сервер для задач сельдерея

Документация Task.backend говорит:

В результате магазин бэкенд использовать для выполнения этой задачи. По умолчанию к заходящего

CELERY_RESULT_BACKEND Поэтому я предположил, что мы могли бы установить Task.backend в строку того же формата, принятого CELERY_RESULT_BACKEND.

Так что я стараюсь это:

celeryconfig.py

CELERY_RESULT_BACKEND = "redis://redis-host:7777" 

tasks.py

@app.task(backend='amqp://[email protected]/tasks-stg') 
def my_task(params): 
    ... 

Однако работник терпит неудачу с:

[2015-05-07 13:33:49,264: ERROR/Worker-1] Process Worker-1 
Traceback (most recent call last): 
    File "/project/python2.7_x64/lib/python2.7/site-packages/billiard/process.py", line 292, in _bootstrap 
    self.run() 
    File "/project/python2.7_x64/lib/python2.7/site-packages/billiard/pool.py", line 286, in run 
    self.after_fork() 
    File "/project/python2.7_x64/lib/python2.7/site-packages/billiard/pool.py", line 389, in after_fork 
    self.initializer(*self.initargs) 
    File "/project/python2.7_x64/lib/python2.7/site-packages/celery/concurrency/prefork.py", line 81, in process_initializer 
    app=app) 
    File "/project/python2.7_x64/lib/python2.7/site-packages/celery/app/trace.py", line 178, in build_tracer 
    store_result = backend.store_result 
AttributeError: 'str' object has no attribute 'store_result' 

ответ

2

The documentati неверно. Task.backend на самом деле является экземпляром базового класса от celery.backends. В этом случае, чтобы переопределить класс задач, я должен был сделать это:

from celery.backends.amqp import AMQPBackend 

@app.task(backend=AMQPBackend(app, url='amqp://[email protected]/tasks-stg')) 
def my_task(params): 
    ... 

Однако рабочие продолжают использовать класс по умолчанию, и, кажется, не предлагают способ переопределить это.

+0

Это работало для меня, несмотря на заключительное замечание ответчика. –