Bonjour,
je me tords les neurones sur un script qui doit communiquer avec d'autres instances de lui-même mais qui en ignore l'existence et le nombre.
Je m'explique :
Mon script est lancé depuis différents process du système (je n'ai aucun contrôle là dessus, mais en gros, ils sont tous lancés en même temps (dans la même demie seconde)).
Chaque instance reçoit un paramètre (sur sa ligne de commande).
Je voudrais :
1 - trouver un critère qui me permette de distinguer une des instances pour en faire le maître (les autres devenant les esclaves)
2 - que chaque esclave envoie son paramètre au maître.
J'ai déjà créé une solution qui marchotte...
Chaque instance va essayer d'ouvrir un fichier en écriture.
Quand un script échoue à ouvrir le fichier, il fait un sleep et réessaye plus tard.
Quand un script arrive à ouvrir le fichier, il regarde sa taille : si elle est nulle, c'est qu'il est le premier => il est le maître.
Si la taille n'est pas nulle, c'est un esclave : il écrit son paramètre à la fin du fichier, le referme et se termine.
Pendant ce temps, le maître, scrute la taille du fichier.
Quand elle reste stable pendant (disons) 300ms, il considère que tous les esclaves ont fini.
Enfin, il ouvre à nouveau le fichier pour en extraire tous les paramètres.
J'ai essayé d'autres variantes en utilisant les mmap mais dans tous les cas, ma solution n'est pas satisfaisante.
Dès que trop d'instances sont en concurrence ou que le CPU ou le disque dur sont un peu débordés, ça échoue :
--> le maître "rate" certains esclaves et leur paramètre est perdu
--> il a plusieurs instances qui se croient maître
En gros, à partir d'une vingtaine d'instance, ça commence à débloquer.
On est loin des 100 ou 200 que j'aimerais pouvoir lancer.
Si je viens vous embêter avec ça, c'est parce que je suis sûr de ne pas être le premier à avoir ce genre de besoin.
Il existe sûrement des solutions propres et de bonnes pratiques en la matière.
Mais peut-on le faire en python et de manière portable (Linux/Windows) ?
Merci d'avance.
Partager