2011-01-12 4 views
0

Je commence avec celery et je veux savoir s'il est possible d'ajouter des modules aux processus celeryd qui ont déjà été démarrés. En d'autres termes, au lieu d'ajouter des modules via celeryconfig.py comme dansAjouter dynamiquement des fonctions aux processus de travail de céleri existants?

CELERY_IMPORTS = ("tasks", "additional_module") 

avant commencer les travailleurs, je veux faire additional_module disponible plus tard en quelque sorte après les processus de travail ont commencé.

merci d'avance.

Répondre

1

Vous pouvez atteindre votre objectif en démarrant un nouveau celeryd avec une liste d'importation étendue et éventuellement en fermant gracieusement votre ancien employé (une fois ses tâches en cours terminées). En raison de la nature asynchrone des tâches qui vous sont envoyées et de leur marquage uniquement après la fin du travail de céleri, vous ne manquerez aucun travail de cette manière. Vous devriez être en mesure d'exécuter les travailleurs de céleri sur la même machine - ils apparaîtront simplement comme de nouvelles connexions à RabbitMQ (ou tout autre backend que vous utilisez).

+0

Comment est-ce que je commencerais un nouveau travailleur de céleri à partir du client? Je pense que vous pouvez fermer les travailleurs de l'intérieur du client, mais comment pouvez-vous en créer un? – reckoner

+1

Je n'ai pas clairement indiqué ce que je voulais dire - j'aurais dû dire de commencer un nouveau * démon céleri * (c'est-à-dire 'celeryd'). J'ai mis à jour mon message. – rlotun

+0

Est-ce que ce conseil est toujours pertinent/pratique exemplaire, au moment où j'écris ceci, août 2014, ou est-ce que de meilleurs moyens existent? J'ai beaucoup de fonctions personnalisées que j'essaye pour l'optimisation numérique qui prend des âges (utilisant ainsi Celery pour les exécuter sur de nombreux ordinateurs), ainsi je voudrais envoyer de nouvelles fonctions à tous les ouvriers, périodiquement, augmentant la gamme des différentes fonctions d'optimisation disponibles à chaque travailleur, à la volée. J'ai lu sur le module de rechargement à la volée, mais cela semble un peu maladroit? Puis-je envoyer de nouvelles fonctions périodiquement, disons, un dict, garantissant que tous les travailleurs les obtiendront? –

Questions connexes