Tôi đang cố gắng sử dụng MongoDB làm hàng đợi thư cho Celery (trong một ứng dụng Django). Phiên bản phát triển hiện tại của Celery (2.2.0rc2) là nghĩa vụ cho phép bạn làm điều này, nhưng tôi dường như không thể có được bất kỳ công nhân nào để nhận nhiệm vụ tôi đang tạo ra.Sử dụng MongoDB làm hàng đợi thư cho Celery
phiên bản: cần tây v2.2.0rc3
MongoDB 1.6.5
pymongo 1,9
django-cần tây 2.2.0rc2
Trong thiết lập của tôi, tôi có:
CELERY_RESULT_BACKEND = "mongodb"
CELERY_MONGODB_BACKEND_SETTINGS = {
# Shouldn't need these - defaults are correct.
"host": "localhost",
"port": 27017,
"database": "celery",
"taskmeta_collection": "messages",
}
BROKER_BACKEND = 'mongodb'
BROKER_HOST = "localhost"
BROKER_PORT = 27017
BROKER_USER = ""
BROKER_PASSWORD = ""
BROKER_VHOST = ""
import djcelery
djcelery.setup_loader()
tôi đã tạo tệp tasks.py thử nghiệm như sau:
from celery.decorators import task
@task()
def add(x, y):
return x + y
Nếu tôi đốt cháy cần tây trong nền, nó có vẻ như bắt đầu bình thường. Sau đó, tôi mở vỏ trăn và chạy như sau:
>>> from myapp.tasks import add
>>> result = add.delay(5,5)
>>> result
<AsyncResult: 7174368d-288b-4abe-a6d7-aeba987fa886>
>>> result.ready()
False
Vấn đề là không có công nhân nào nhận nhiệm vụ. Tôi có thiếu thiết lập hay gì đó không? Làm cách nào để chỉ cần cần tây vào hàng đợi tin nhắn?
Ứng dụng trong ứng dụng đã cài đặt chưa? Cần tây trở lại trong nhật ký của nó là gì nếu có gì? Một lý do phổ biến mà .ready() sẽ trả về False khi nó thực sự không nên là bởi vì các nhiệm vụ không được nhận ra, Celery sẽ nói điều gì đó như "Unknown task ignored: ...." – Bartek
Bạn đã bao giờ làm việc này chưa? Tôi gặp vấn đề tương tự – Nathan
Tôi không, thật không may. – Joe