2014-04-22 16 views
42

Tôi đang chạy First Steps with Celery Tutorial.Cần tây với RabbitMQ: Thuộc tínhError: đối tượng 'DisabledBackend' không có thuộc tính '_get_task_meta_for'

Chúng tôi xác định nhiệm vụ sau đây:

from celery import Celery 

app = Celery('tasks', broker='amqp://[email protected]//') 

@app.task 
def add(x, y): 
    return x + y 

Sau đó gọi nó là:

>>> from tasks import add 
>>> add.delay(4, 4) 

Nhưng tôi nhận được lỗi sau:

AttributeError: 'DisabledBackend' object has no attribute '_get_task_meta_for' 

Tôi đang chạy cả người lao động cần tây và máy chủ thỏ-mq. Thay vào đó, công nhân cần tây kỳ lạ báo cáo nhiệm vụ là thành công:

[2014-04-22 19:12:03,608: INFO/MainProcess] Task test_celery.add[168c7d96-e41a-41c9-80f5-50b24dcaff73] succeeded in 0.000435483998444s: 19 

Tại sao tính năng này không hoạt động?

+11

Là người dùng mới của Celery và RabbitMQ (hoặc bất kỳ thư viện nào bạn muốn tìm hiểu) gặp lỗi khi làm theo hướng dẫn không truyền cảm hứng cho sự tự tin về chất lượng của phần mềm. Nó chỉ đơn giản là bực bội. Tôi muốn tìm hiểu cách sử dụng thư viện của bạn, không phải cách giải quyết của nó. – Diederik

Trả lời

34

Chỉ cần đọc hướng dẫn đọc. Nó sẽ được giải thích trong chương Keep Results.

Để bắt đầu Celery, bạn chỉ cần cung cấp thông số môi giới, là thông số bắt buộc để gửi tin nhắn về các tác vụ. Nếu bạn muốn lấy thông tin về trạng thái và kết quả được trả về bởi các tác vụ đã hoàn thành, bạn cần thiết lập tham số backend. Bạn có thể tìm thấy danh sách đầy đủ với mô tả trong Configuration docs: CELERY_RESULT_BACKEND.

+7

Tôi không gặp bất kỳ sự cố nào sau hướng dẫn, nhưng vẫn gặp lỗi này và đã gặp khó khăn trong việc sửa lỗi. Tôi đã chạy Celery trong một cửa sổ thiết bị đầu cuối Ubuntu, và trình thông dịch Python trong một giây. Trong cửa sổ đầu tiên, tôi đã thêm backend = 'rpc: //' và khởi động lại Celery. Nhưng Python, trong cửa sổ thứ hai, không nhận thức được sự thay đổi này. Sau khi tôi nhấn Ctrl + d để giết Python, và khởi động lại Python, nó hoạt động tốt. –

+0

Tôi nhận được 404 có liên kết cuối cùng trong câu trả lời của bạn. –

+0

@BryanOakley Tôi đã cập nhật liên kết. Tuy nhiên, Celery v4 đã thay đổi cài đặt ở đây, vì vậy hãy tiến hành thận trọng. – daniula

13

Trong trường hợp bất cứ ai làm như vậy dễ dàng để làm cho sai lầm như tôi đã làm: Các hướng dẫn không nói như vậy rõ ràng, nhưng dòng

app = Celery('tasks', backend='rpc://', broker='amqp://') 

là một EDIT của dòng trong tập tin tasks.py của bạn. Mine bây giờ đọc:

app = Celery('tasks', backend='rpc://', broker='amqp://[email protected]//') 

Khi tôi chạy python từ dòng lệnh tôi nhận được:

$ python 
>>> from tasks import add 
>>> result = add.delay(4,50) 
>>> result.ready() 
>>> False 

Tất cả các hướng dẫn nên dễ làm theo, ngay cả khi hơi say. Cho đến nay cái này không chạm tới thanh đó.

+0

tốt, khi bạn làm theo hướng dẫn, hãy nhớ rằng sau khi chỉnh sửa tasks.py bạn cũng phải nhập lại hàm bổ sung từ mô-đun nhiệm vụ! Về cơ bản mặc dù gán backend chính xác trong add() Tôi vẫn nhận được lỗi này cho đến khi tôi thoát khỏi Python trong giao diện điều khiển (>>> quit()), đã trở lại nó ($ python) và retyped từ nhiệm vụ import add. – fanny

1

trong thư mục dự án của bạn tìm tệp cài đặt.

thì: sudo vim settings.py sao chép/dán vào settings.py: CELERY_RESULT_BACKEND = 'djcelery.backends.database: DatabaseBackend'

lưu ý: đây là nếu bạn đang sử dụng django-cần tây như là phụ trợ cho lưu trữ các tin nhắn trong hàng đợi.

+0

Tôi gặp sự cố này khi xóa backend_result = rpc (tức là dựa vào phần phụ trợ kết quả mặc định, không có gì), và sau đó liên tục gọi kết quả là ready.ready() – axd

Các vấn đề liên quan