2015-11-10 3 views
0

Я запускаю Python 2.7.10 и Celery 3.1.19 с использованием RabbitMQ 3.5.6.Pinton Celery Asynchronous Tasks

Я боюсь, что я просто не понимаю, как работает Сельдерей. Вот мой tasks.py файл:

from celery import Celery 
app = Celery('tasks', backend='rpc://', broker='amqp://[email protected]//') 

@app.task 
def add(a, b): 
    return a + b 

А вот стенограмма моей игры с этим:

In [20]: res0 = add.delay(1,2) 

In [21]: res0.ready() 
Out[21]: True 

In [22]: res0.get() 
Out[22]: 3 

In [23]: res1 = add.delay(2,3) 

In [24]: res1.ready() 
Out[24]: True 

In [25]: res1.get() 
Out[25]: 5 
--- try in a different order ---- 
In [26]: res0 = add.delay(1,2) 

In [27]: res1 = add.delay(2,3) 

In [28]: res0.ready() 
Out[28]: True 

In [29]: res1.ready() 
Out[29]: False 

In [30]: res0.get() 
Out[30]: 3 

Я думал, что сельдерей может выполнять задачи асинхронно? Почему и то, и другое: add s работают сверху, но не внизу? Я должен злоупотреблять или недопонимать Сельдерей. Кто-нибудь может мне помочь?

Спасибо за помощь!

Update:

Другой транскрипт играть с этим. Является ли сельдерей квантовомеханическим, когда государство только рушится, когда вы проверяете, что произошло ?! Я весьма озадачен!

In [12]: res0 = add.delay(1,2) 

In [13]: res1 = add.delay(2,3) 

In [14]: res0.ready() 
Out[14]: True 

In [15]: res1.ready() 
Out[15]: False 

In [16]: res0.result 
Out[16]: 3 
--- another try ---- 
In [17]: res0 = add.delay(1,2) 

In [18]: res1 = add.delay(2,3) 

In [19]: res1.ready() 
Out[19]: True 

In [20]: res0.ready() 
Out[20]: False 

In [21]: res1.result 
Out[21]: 5 

ответ

2

Похоже, я наткнулся в угол сельдерея, что большинство людей не думают, чтобы войти, но здесь это. Оказывается, что если вы не используете rpc:// бэкенд, а использовать прямую ссылку на RabbitMQ, он работает:

# this works 
app = Celery('tasks', backend='amqp://[email protected]//', broker='amqp://[email protected]lhost//') 

Метод rpc:// дается в official docs here, но это сломанный пример. Итак - не используйте rpc://, если хотите истинное асинхронное поведение!