Bonsoir à tout le monde,
J'ai cherché mon problème toute la journée, sans succès. Et même sur ce forum, je n'ai rien trouvé... Je vous écris donc en espérant trouvé quelqu'un qui ait des pistes ou mieux, connaisse la solution à mon problème! Pour celà, je vais tenter d'être le plus clair possible.
J'ai un script Python qui utilise le module Numeric et qui démarre une "thread" servant à communique avec un serveur distant. D'autre part, celle-ci, en plus, va suivre l'évolution d'une valeur dans un tableau créée par Numeric. Jusque là, aucun souci. Les messages en provenance du client atteignent le serveur sans aucun os (Le client transmet en fait certaines valeurs contenues dans le tableau).
Le problème provient lorsque je démarre une autre "thread". Cette dernière n'est rien d'autre qu'un "process" qui appelle une fonction contenue dans une librairie C. Vous vous en doutez, cette fonction va modifier le tableau Numeric créée précédemment et ainsi modifier la valeur de certaines "cases" du tableau. Le client n'aura ensuite qu'à transmettre la nouvelle valeur au serveur. Il est essentiel de noter là que l'utilisation d'un tableau Numeric est beaucoup plus appréciable que l'appelle à des modules ctypes.
Mais là, une fois démarré, la première "thread" ne progresse plus, comme si elle était bloquée.
Je me questionne donc, car Python est sensé utiliser le GIL qui permet d'allouer un certain temps pour chaque thread lancée en bloquand temporairement les autres.
D'autre part, je ne peux pas faire appel aux fonctions Py_BEGIN_ALLOW_THREADS puisque la fonction C va accéder à des variables qui sont aussi en fait des objets Python.
Je tiens aussi à préciser que tant que je ne démarre que des threads qui agissent sous Python, toute les threads procèdent normalement. C'est seulement avec la thread qui fait appel à une librairie C que ça plante.
Quelqu'un aurait-il une idée ?
Merci par avance,
Mickaël
Partager