2014-10-30 17 views
6

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.

+0

đâ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 đó. –

+0

@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

+0

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. –

Trả lời

0
+0

ông đặt rằng trong app = Celery ('nhiệm vụ', backend = 'amqp', broker = 'amqp: //') –

+0

@silviud Tôi có dòng sau trong tasks.py 'app = Celery ('nhiệm vụ', backend = 'amqp', broker = ' amqp: // ') '; Tôi nghĩ rằng đã chăm sóc cho phép phụ trợ? – kyphos

+1

thiết lập cho kết quả phụ trợ là sai - chứng minh là bạn nhận được một thời gian chờ khi làm một get - bạn có thể thiết lập lại môi giới của bạn 'rabbitmqctl stop_app; đặt lại rabbitmqctl; rabbitmqctl start_app '. Bạn có thể ping công nhân của bạn như thế này 'cần tây kiểm tra ping' bạn cũng sẽ thấy một trao đổi được gọi là celeryresults khi làm 'rabbitmqctl list_exchanges' - để xem một nhiệm vụ vẫn hoạt động, bạn có thể sử dụng 'cần tây kiểm tra hoạt động' - xin lỗi tôi đã không giải thích tốt hơn – silviud

2

Được rồi, tôi đã thiết lập một VM rõ ràng với cần tây tươi cài đặt, thiết lập các tập tin sau đây:

tasks.py:

from celery import Celery 

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

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

Và runme.py

from tasks import add 
import time 

result = add.delay(1,2) 
while not result.ready(): 
    time.sleep(1) 

print(result.get()) 

Sau đó, tôi thiết lập cần tây với:

celery -A tasks worker --loglevel=info 

Và sau đó tôi chạy runme.py mang đến cho dự kiến ​​kết quả:

[[email protected] tmp]# python3.3 runme.py 
3 

Vì vậy, rõ ràng vấn đề này nằm trong thiết lập của bạn, rất có thể ở đâu đó trong cài đặt thỏ mq, vì vậy tôi khuyên bạn nên cài đặt lại nó với phiên bản ổn định mới nhất từ ​​các nguồn , đó là những gì tôi đang sử dụng, và như bạn thấy - nó hoạt động tốt.

Cập nhật:

Trên thực tế, vấn đề của bạn có thể là tầm thường như tưởng tượng - bạn có chắc rằng bạn đang sử dụng cùng một phiên bản dành cho cần tây chạy, và chạy tiêu dùng của bạn? Tôi chỉ quản lý để tái sản xuất nó, nơi tôi đã chạy cần tây trên Python3.3, và sau đó chạy runme.py với phiên bản 2.7. Kết quả là như bạn đã mô tả.

+0

@Puicek cảm ơn bài đăng rất sâu sắc; Tôi chỉ cài đặt python2.7, cài đặt phiên bản mới nhất của cần tây và cài đặt phiên bản 3.4.1 của rabbitMQ cho các cửa sổ. VM của bạn được thiết lập là gì, tôi cũng muốn thử nó và xem nó có hiệu quả với tôi không? – kyphos

+0

Cũng thử cài đặt lại nó (không cải tiến). Nếu yout VM là linux, tôi nghĩ rằng đây có thể là một vấn đề cụ thể của windows – kyphos

+0

@kyphos nó thực sự là một linux (gentoo phải cụ thể, nhưng tôi sẽ không giới thiệu nó cho một newbie), hãy thử và cho tôi biết làm thế nào nó đi. –

3

nên giải quyết vấn đề của bạn

ignore_result=False 
Các vấn đề liên quan