J'ai besoin de lire depuis Rabbitmq et d'exécuter la tâche en parallèle en utilisant Celery dans un seul système.
[2014-12-30 15:54:22,374: INFO/Worker-1] ...
[2014-12-30 15:54:23,401: INFO/Worker-1] ...
[2014-12-30 15:54:30,878: INFO/Worker-1] ...
[2014-12-30 15:54:32,209: INFO/Worker-1] ...
[2014-12-30 15:54:33,255: INFO/Worker-1] ...
[2014-12-30 15:54:48,445: INFO/Worker-1] ...
[2014-12-30 15:54:49,811: INFO/Worker-1] ...
[2014-12-30 15:54:50,903: INFO/Worker-1] ...
[2014-12-30 15:55:39,674: INFO/Worker-1] ...
[2014-12-30 15:55:41,024: INFO/Worker-1] ...
[2014-12-30 15:55:42,147: INFO/Worker-1] ...
Il ne coule qu'un seul travailleur fonctionne tout le temps .. c'est-à-dire l'un après l'autre dans un ordre séquentiel. Comment puis-je configurer Celery pour exécuter plusieurs travailleurs pour exécuter en parallèle?
J'ai maintenant mis à jour ma réponse suite au commentaire de MartinP concernant les processus fils de génération de travailleurs et non les threads:
Céleri worker
et worker processes
sont des choses différentes ( Lisez ceci pour référence ).
Lorsqu'un travailleur est démarré, il génère alors un certain nombre de processus enfants.
Le nombre par défaut de ces processus est égal à un certain nombre de cœurs sur cette machine.
Sous Linux, vous pouvez vérifier le nombre de cœurs via:
$ nproc --all
Sinon, vous pouvez le spécifier vous-même, par exemple:
$ celery -A proj worker --loglevel=INFO --concurrency=2
Dans l'exemple ci-dessus, il y a un travailleur qui pourra générer 2 processus enfants. Il est normalement conseillé d'exécuter un seul travailleur par machine et la valeur de concurrence définira le nombre de processus à exécuter en parallèle, mais si plusieurs travailleurs doivent être exécutés, vous pouvez les démarrer comme indiqué ci-dessous:
$ celery -A proj worker -l info --concurrency=4 -n wkr1@hostname
$ celery -A proj worker -l info --concurrency=2 -n wkr2@hostname
$ celery -A proj worker -l info --concurrency=2 -n wkr3@hostname
Reportez-vous à céleri docs pour plus d'informations
J'ai trouvé ça
http://docs.celryproject.org/en/latest/reference/celery.html?highlight=parallel
Vous pouvez rechercher les primitives Canvas là où vous pouvez voir comment créer des groupes pour une exécution parallèle.
classe celery.group (task1 [ task2 [ task3 [… taskN]]]) Crée un groupe de tâches à exécuter en parallèle.
Sinon, un bon moyen est d'aller sur le canal IRC et de poser des questions spéciales. Normalement, il y a des gens qui savent très bien et ils peuvent vous aider.
Il semble que votre travailleur exécute simplement un seul processus/thread. Vous avez probablement juste besoin d'ajouter le --concurrency
ou -c
argument lors du démarrage du travailleur pour générer plusieurs instances de travail (parallèles).
celery -A proj worker -c 4