2011-11-01 4 views
1

Je suis nouveau sur le céleri et peut-être faire quelque chose de mal, mais j'ai déjà passé beaucoup d'essayer de comprendre comment configurer le céleri correctement. Donc, dans mon environnement, j'ai 2 serveurs distants; un est principal (il a adresse IP publique et la plupart des choses comme serveur de base de données, serveur rabbitmq et serveur web exécutant mon application web est là) et un autre est utilisé pour des tâches spécifiques que je veux invoquer asynchrone de le principal serveur utilisant le céleri. Je prévoyais d'utiliser RabbitMQ comme courtier et comme back-end de résultats. config Céleri est très basique:Comment configurer et exécuter correctement le travail à distance du céleri?

CELERY_IMPORTS = ("main.tasks",) 
BROKER_HOST = "Public IP of my main server" 
BROKER_PORT = 5672 
BROKER_USER = "guest" 
BROKER_PASSWORD = "guest" 
BROKER_VHOST = "/" 
CELERY_RESULT_BACKEND = "amqp" 

Quand je suis en cours d'exécution d'un travailleur sur les principales tâches de serveur sont exécutées juste bien, mais quand je suis en cours d'exécution sur le serveur distant seulement quelques tâches sont exécutées et puis le travailleur se bloque en ne pouvant exécuter aucune tâche . Quand je redémarre l'ouvrier, il exécute quelques tâches de plus et obtient à nouveau . Il n'y a rien de spécial à l'intérieur de la tâche et j'ai même essayé une tâche de test qui ajoute simplement 2 chiffres. J'ai essayé d'exécuter le travailleur différemment (diabolisation et non, réglage de la simultanéité et en utilisant celeryd_multi), rien n'a vraiment aidé.

Quelle pourrait être la raison? Ai-je manqué quelque chose? Dois-je exécuter quelque chose sur le serveur principal autre que le courtier (RabbitMQ)? Ou est-ce c'est un bug dans le céleri (j'ai essayé quelques versions: 2.2.4, 2.3.3 et dev, mais aucune d'elles n'a fonctionné)?

Hm ... Je viens de reproduire le même problème sur le travailleur local, donc je ne sais pas vraiment ce qu'il est ... Est-il nécessaire de redémarrer travailleur de céleri après chaque N tâches exécutées?

Toute aide sera très appréciée :)

Répondre

1

Je ne sais pas si vous avez fini de résoudre le problème, mais j'ai eu des symptômes similaires. Il s'est avéré que (pour une raison quelconque) les instructions d'impression à l'intérieur des tâches provoquaient des tâches à ne pas terminer (peut-être une sorte de situation de blocage). Seules certaines tâches comportaient des instructions d'impression, de sorte que lorsque ces tâches étaient exécutées, le nombre de travailleurs (défini par l'option de concurrence) était épuisé, ce qui entraînait l'arrêt de l'exécution des tâches.

Questions connexes