2016-05-23 1 views
2

J'utilise le céleri pour effectuer un certain temps déclenché des tâches. En utilisant des méthodes de ligne de commande normales, je suis facilement capable de générer des tâches et de les exécuter. Pour cela, je dois créer deux démons, un pour le céleri et un autre pour le céleri.Run travailleur de céleri et de céleri battre comme fil

Maintenant que le céleri ne résout mon problème de la création et l'exécution du temps déclenché des tâches, mais il est au prix de deux daemons supplémentaires pour mon système. J'ai déjà un démon en cours d'exécution pour mon module et je veux réutiliser (ajouter travailleur de céleri et battre comme un fil au module existant). Y a-t-il un moyen de le faire?

Répondre

2

Vous pouvez utiliser app.worker_main() pour exécuter le travailleur comme un fil.

Étant donné que vous étiez en mesure de l'exécuter à partir de la ligne de commande, je suppose que vous avez déjà construit un objet pour la classe Celery (généralement appelé app dans docs). Vous pouvez essayer le code suivant pour exécuter le worker en tant que thread. Créez un thread pour la méthode ci-dessus dans le fichier main.py du module.

Pour battre le céleri, je l'avais déjà tenté la construction d'une méthode similaire moi-même. (Je ne sais pas s'il existe déjà une méthode). J'ai écrit la méthode suivante et ajouté à la classe Céleri

def beat_main(self, argv=None): 
    return instantiate(
     'celery.bin.beat:beat', 
     app=self).execute_from_commandline(argv) 

Votre classe Céleri est écrit dans /usr/local/lib/python2.7/dist-packages/celery/app/base.py. Essayez de l'utiliser de la même façon que le travailleur (app.beat_main avec des arguments). J'espère que cela fonctionne pour vous aussi.