J'exécute le Premiers pas avec le tutoriel sur le céleri .
Nous définissons la tâche suivante:
from celery import Celery
app = Celery('tasks', broker='amqp://guest@localhost//')
@app.task
def add(x, y):
return x + y
Appelez-le ensuite:
>>> from tasks import add
>>> add.delay(4, 4)
Mais j'obtiens l'erreur suivante:
AttributeError: 'DisabledBackend' object has no attribute '_get_task_meta_for'
J'exécute à la fois le travailleur céleri et le serveur rabbit-mq. Assez étrangement, le travailleur du céleri rapporte que la tâche a réussi:
[2014-04-22 19:12:03,608: INFO/MainProcess] Task test_celery.add[168c7d96-e41a-41c9-80f5-50b24dcaff73] succeeded in 0.000435483998444s: 19
Pourquoi ça ne marche pas?
Continuez simplement à lire le tutoriel. Il sera expliqué dans le chapitre Conserver les résultats .
Pour démarrer Celery, vous devez fournir uniquement le paramètre de courtier, qui est requis pour envoyer des messages sur les tâches. Si vous souhaitez récupérer des informations sur l'état et les résultats renvoyés par les tâches terminées, vous devez définir le paramètre backend. Vous pouvez trouver la liste complète avec une description dans Documents de configuration: CELERY_RESULT_BACKEND .
Je suggère de jeter un œil à: http://www.cnblogs.com/fangwenyu/p/3625830.html
Là, vous verrez qu'au lieu de
app = Celery('tasks', broker='amqp://guest@localhost//')
tu devrais écrire
app = Celery('tasks', backend='amqp', broker='amqp://guest@localhost//')
Ça y est.
Au cas où quelqu'un aurait fait la même erreur facile que moi: le didacticiel ne le dit pas explicitement, mais la ligne
app = Celery('tasks', backend='rpc://', broker='amqp://')
est une modification de la ligne dans votre tasks.py
fichier. Le mien se lit maintenant:
app = Celery('tasks', backend='rpc://', broker='amqp://guest@localhost//')
Lorsque j'exécute python à partir de la ligne de commande, j'obtiens:
$ python
>>> from tasks import add
>>> result = add.delay(4,50)
>>> result.ready()
>>> False
Tous les tutoriels doivent être faciles à suivre, même lorsqu'ils sont un peu ivres. Jusqu'à présent, celui-ci n'atteint pas cette barre.
Ce qui n'est pas clair dans le tutoriel, c'est que le module tasks.py doit être édité pour que vous changiez la ligne:
app = Celery('tasks', broker='pyamqp://guest@localhost//')
pour inclure le backend de résultat RPC:
app = Celery('tasks', backend='rpc://', broker='pyamqp://')
Une fois fait, Ctrl + C le processus de travail du céleri et redémarrez-le:
celery -A tasks worker --loglevel=info
Le didacticiel est déroutant en ce que nous supposons que la création de l'objet d'application se fait dans la session de test du client, ce qui n'est pas le cas.
dans votre répertoire de projet, recherchez le fichier de paramètres.
puis: Sudo vim settings.py copier/coller dans settings.py: CELERY_RESULT_BACKEND = 'djcelery.backends.database: DatabaseBackend'
remarque: c'est si vous utilisez Django-celery comme backend pour stocker les messages dans la file d'attente.