2014-12-08 11 views
5

Próbuję uruchomić przykład dla Celery na Windowsie z backendem redis. Kod wygląda następująco:Zadanie dla selera zawsze OCZEKUJĄCE

from celery import Celery 

app = Celery('risktools.distributed.celery_tasks', 
      backend='redis://localhost', 
      broker='redis://localhost') 

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

@app.task(ignore_result=False) 
def add_2(x, y): 
    return x + y 

zacznę zadań za pomocą konsoli ipython:

>>> result_1 = add.delay(1, 2)  
>>> result_1.state 
'PENDING' 
>>> result_2 = add_2.delay(2, 3)  
>>> result_2.state 
'PENDING' 

Wydaje się, że oba zadania nie zostały wykonane, ale wyjście pracownik Seler pokazuje, że im się udało:

[2014-12-08 15:00:09,262: INFO/MainProcess] Received task: risktools.distributed.celery_tasks.add[01dedca1-2db2-48df-a4d6-2f06fe285e45] 
[2014-12-08 15:00:09,267: INFO/MainProcess] Task celery_tasks.add[01dedca1-2db2-48df-a4d6-2f06fe28 
5e45] succeeded in 0.0019998550415s: 3 
[2014-12-08 15:00:24,219: INFO/MainProcess] Received task: risktools.distributed.celery_tasks.add[cb5505ce-cf93-4f5e-aebb-9b2d98a11320] 
[2014-12-08 15:00:24,230: INFO/MainProcess] Task celery_tasks.add[cb5505ce-cf93-4f5e-aebb-9b2d98a1 
1320] succeeded in 0.010999917984s: 5 

Próbowałem rozwiązać ten problem zgodnie z Celery documentation, ale żadna z porad nie była przydatna. Co robię źle i jak mogę otrzymywać wyniki z zadania Selera?

UPD: Dodałem zadanie bez ignore_result parametru, ale nic się nie zmieniło

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

>>>r = add_3.delay(2, 2) 
>>>r.state 
'PENDING' 
+0

'.get()' zwróci wynik. Nie wiesz, dlaczego zawsze otrzymujesz 'PENDING' tho – user2097159

+0

@ user2097159' .get() 'kończy się niepowodzeniem z' TimeoutError: Przekroczono limit czasu operacji. ' –

+0

Czy ustawiłeś 'BROKER_URL' w dowolnym miejscu? – user2097159

Odpowiedz

0

Zdjąć ignore_result=False z docs selera

Task.ignore_result 

Don’t store task state. Note that this means you can’t 
use AsyncResult to check if the task is ready, or get its return value. 
+0

Nadal dostaję stan 'PENDING' (patrz metoda' add_3' w UPD) –