Tôi vừa mới cài đặt cần tây và đang cố gắng để làm theo hướng dẫn:Cần tây - Hoàn thành nhiệm vụ nhưng không bao giờ trở lại dẫn
Tôi có một tập tin gọi là tasks.py với đoạn mã sau:
from celery import Celery
app = Celery('tasks', backend='amqp', broker='amqp://')
@app.task
def add(x, y):
return x + y
tôi cài đặt RabitMQ (Tôi đã không cấu hình với nó kể từ khi hướng dẫn đã không đề cập đến bất cứ điều gì của loại đó).
tôi chạy máy chủ lao động cần tây như sau:
celery -A tasks worker --loglevel=info
Dường như để khởi động bình thường (ở đây là kết quả: http://i.imgur.com/qnoNCzJ.png)
Sau đó, tôi chạy một kịch bản như sau:
from tasks import add
from time import sleep
result = add.delay(2,2)
while not result.ready():
sleep(10)
Khi tôi kiểm tra result.ready()
Tôi luôn nhận được Sai (vì vậy vòng lặp while ở trên chạy mãi mãi). Tuy nhiên, trên nhật ký Celery, mọi thứ có vẻ tốt đẹp:
[2014-10-30 00:58:46,673: INFO/MainProcess] Received task: tasks.add[2bc4ceba-1319-49ce-962d-1ed0a424a2ce]
[2014-10-30 00:58:46,674: INFO/MainProcess] Task tasks.add[2bc4ceba-1319-49ce-962d-1ed0a424a2ce] succeeded in 0.000999927520752s: 4
Vì vậy, nhiệm vụ đã được lưu trữ và thành công. Tuy nhiên, result.ready()
vẫn là Sai. Bất kỳ cái nhìn sâu sắc nào về lý do tại sao điều này có thể là? Tôi đang sử dụng Windows 7 và đang sử dụng RabbitMQ. Cảm ơn trước.
đâu trong mã của bạn để bạn chạy result.readh() kiểm tra? Bạn không bao gồm phần đó. Nó cũng có thể là giá trị cố gắng kết quả = add.delay (2,2) .get (5), và xem liệu bạn sẽ nhận được kết quả theo cách đó. –
@Puciek Đối với 'result = add.delay (2,2) .get (5)' Tôi nhận được 'result = add.delay (2,2) .get (5)' vì vậy tôi đoán nó không nhận được bất cứ điều gì trở lại. Nếu tôi thử 'result.readh()' tôi nhận được 'AttributeError: 'AsyncResult' đối tượng không có thuộc tính 'readh'' – kyphos
Vui lòng đăng mã nơi bạn kiểm tra xem dữ liệu đã sẵn sàng chưa, vì nó là điều này là vô nghĩa đoán. –