2011-06-18 4 views
0

J'ai besoin dans mon projet django d'exécuter de longues tâches. Désiré d'utiliser le céleri avec Redis comme courtier. Redis installé fonctionne:Tâches asynchrones de céleri dans le projet django. Comment ça marche?

Le serveur est maintenant prêt à accepter les connexions sur le port 6379

Que installer django-céleri, configurer:

import djcelery 
djcelery.setup_loader() 
BROKER_HOST = "localhost" 
BROKER_PORT = 6379 #redis 
BROKER_USER = "guest" 
BROKER_PASSWORD = "guest" 
BROKER_VHOST = "/" 

et l'exécuter:

python manage.py celeryd -l DEBUG 
[...] 
[2011-06-18 10:31:37,913: DEBUG/MainProcess] Starting thread Timer... 
[2011-06-18 10:31:37,914: DEBUG/MainProcess] Starting thread Consumer... 
[2011-06-18 10:31:37,914: WARNING/MainProcess] [email protected] has started. 
[2011-06-18 10:31:37,914: DEBUG/MainProcess] Consumer: Re-establishing connection to the broker... 

mon exemple de tâche ressemble à:

from celery.decorators import task 
@task() 
def add(x, y): 
    return x + y 

maintenant j'essaie de le lancer dans la coquille:

In [3]: from message.tasks import add 
In [4]: r=add.delay(2, 5)  

il attendre très longtemps et rendre Traceback http://dpaste.com/555939/. Qu'est-ce que ça peut être? Peut-être que je manque quelque chose?

Répondre

2

Le paramètre BROKER_BACKEND est manquant. Voici une configuration par exemple pour l'utilisation Redis:

import djcelery 
djcelery.setup_loader() 

CELERY_RESULT_BACKEND = 'database' 

BROKER_BACKEND = 'redis' 
BROKER_HOST = 'localhost' 
BROKER_PORT = 6379 
BROKER_VHOST = '1' 
0

Je ne sais pas ce que c'est, mais je sais que RabbitMQ est le courtier recommandé pour Celery et Django. Je l'ai fonctionné et cela fonctionne comme un charme. Pourquoi ne pas essayer?

+0

Le problème était que je courais shell comme: > python manage.py shell – greg

+0

Ah, oui, vous ne pouvez exécuter le céleri à partir d'un fichier dans votre application Django en effet, aurait dû remarquer que :) – fijter