J'essaie d'utiliser Python dans un module pour un logiciel d'analyse de systèmes de bus de véhicules. Pour cela, je dois intégrer Python de manière sûre, car il peut y avoir plusieurs instances du module qui fonctionnent indépendamment. Je pourrais utiliser un mutex pour garder tous les accès à Python et créer un module unique (python) pour chaque thread. Évidemment, c'est le moyen le plus facile, mais il a aussi le prix de ne pas pouvoir évoluer sur plusieurs cœurs. Ou je pourrais modifier mon module pour engendrer de nouveaux processus dont le stagiaire utilise Python et se connecter à eux via la mémoire partagée. Cela me donne une pénalité de performance et coûte plus de temps à mettre en œuvre, mais évolue très bien.Incorporation de thread sûr Python
Ma question: comment pensez-vous que cela a plus de sens? Y a-t-il un autre moyen d'intégrer le thread Python en toute sécurité ou même d'une manière qui échelonne sur plusieurs cœurs.
Sincères salutations Moritz
edit: J'utilise CPython
Cela dépend de la complexité de ce que vous faites en python, mais dans un scénario général, je dirais que l'utilisation de plusieurs interpréteurs est la bonne solution. Cela améliorerait considérablement la flexibilité et l'évolutivité (pour vous permettre de contourner le GIL en même temps) et vous n'auriez pas besoin de modules par thread. Je pense que le résultat serait beaucoup plus accessible aux autres développeurs sur votre projet et beaucoup plus général. – Olson
Salut Jagerkin si vous postez votre commentaire à nouveau comme réponse je vais probly l'accepter. – JustMaximumPower
@Jagerkin: c'est exactement ce que fait la bibliothèque 'multiprocessing'. La création simultanée de deux interpréteurs Python n'est pas aussi triviale qu'elle le semble au départ, car vous devrez vous préoccuper de la synchronisation processus/thread et de la communication inter-thread/process. La bibliothèque multitraitement fait déjà la plupart du travail pour vous, elle a une version multiprocessus de "File d'attente", "Pipe", "Pool", "valeurs partagées" qui sérialisent et désérialisent de façon transparente les objets sur IPC/mémoire partagée et "Locks" qui se synchronisent sur plusieurs traitements, de sorte que vous n'avez pas à les faire vous-même. –