2014-10-30 21 views
6

Ho appena installato sedano e sto cercando di seguire il tutorial:Sedano - Completa compito, ma non restituisce il risultato

Ho un file chiamato tasks.py con il seguente codice:

from celery import Celery 

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

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

I RabitMQ installato (non ho configurato con esso dal momento che il tutorial non menzionava nulla di quel genere).

ho eseguire il server lavoratore sedano come segue:

celery -A tasks worker --loglevel=info 

Sembra avvia normalmente (qui è l'output: http://i.imgur.com/qnoNCzJ.png)

Poi ho eseguito uno script con il seguente:

from tasks import add 
from time import sleep 

result = add.delay(2,2) 

while not result.ready(): 
    sleep(10) 

Quando controllo lo result.ready() ottengo sempre False (quindi il ciclo while sopra viene eseguito per sempre). Nei registri di Celery, tuttavia, tutto sembra a posto:

[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 

Quindi il compito è stato ripreso e ha esito positivo. Eppure, result.ready() è ancora Falso. Qualche idea sul perché questo potrebbe essere? Sono su Windows 7 e sto usando RabbitMQ. Grazie in anticipo.

+0

Dove nel codice si esegue result.readh() controllare? Non hai incluso quella parte. Potrebbe anche valere la pena provare result = add.delay (2,2) .get (5), e vedere se otterrete risultati in questo modo. –

+0

@Puciek Per 'result = add.delay (2,2) .get (5)' Ottengo 'result = add.delay (2,2) .get (5)' quindi suppongo che non riceva nulla. Se provo 'result.readh()' Ricevo l'errore 'AttributeError:' AsyncResult 'non ha attributo' readh'' – kyphos

+0

Si prega di inviare il codice dove si controlla se i dati sono pronti, in quanto si tratta di inutili ipotesi. –

risposta

0
+0

lo ha impostato in app = Celery ('tasks', backend = 'amqp', broker = 'amqp: //') –

+0

@silviud Ho la seguente riga in tasks.py 'app = Celery ('tasks', backend = 'amqp', broker = ' AMQP: // ') '; Pensavo che si occupasse dell'abilitazione del backend? – kyphos

+1

l'impostazione per il backend dei risultati è errata - la prova è che si ottiene un timeout quando si fa un get - è possibile ripristinare il tuo broker 'rabbitmqctl stop_app; reset di rabbitmqctl; rabbitmqctl start_app '. Puoi eseguire il ping del tuo lavoratore in questo modo 'sedici controlli ping' inoltre dovresti vedere uno scambio chiamato celeryresults quando fai 'rabbitmqctl list_exchanges' - per vedere se un'attività è ancora attiva puoi usare 'controlli di sedici attivi' - scusa non ho spiegato meglio – silviud

2

Va bene, ho creato una chiara VM con sedano fresco installare, impostare i seguenti file:

tasks.py:

from celery import Celery 

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

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

E runme.py

from tasks import add 
import time 

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

print(result.get()) 

Quindi ho impostato il sedano con:

celery -A tasks worker --loglevel=info 

e successivamente ho eseguito il runme.py che dà risultato atteso:

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

Quindi chiaramente il problema è all'interno del vostro setup, molto probabilmente da qualche parte nel montaggio di coniglio-mq, quindi vi consiglio di reinstallarlo con l'ultima versione stabile da fonti , che è quello che sto usando, e come puoi vedere - funziona perfettamente.

Aggiornamento:

In realtà, il problema può essere così banale come si possa immaginare - siete sicuri che si sta utilizzando la stessa versione per la marcia di sedano, e l'esecuzione di vostro consumatore? Sono riuscito a riprodurlo, dove ho eseguito sedery su Python3.3 e successivamente ho eseguito runme.py con la versione 2.7. Il risultato è stato come hai descritto.

+0

@Puicek grazie per il post molto perspicace; Ho solo installato python2.7, ho collegato l'ultima versione di sedano e installato la versione 3.4.1 di rabbitMQ per Windows. Qual è la tua VM impostata, vorrei provare anche io e vedere se questo funziona per me? – kyphos

+0

Anche provato a reinstallarlo (nessun miglioramento). Se la tua VM è Linux, penso che questo potrebbe essere un problema specifico per Windows – kyphos

+0

@kyphos è davvero un linux (gentoo è specifico, ma non lo consiglierei a un principiante), provalo e fammi sapere come va –

3

dovrebbe risolvere il tuo problema

ignore_result=False