Je travaille sur l'incorporation de Python à C ++. Dans un cas particulier, j'ai besoin de deux instances distinctes de l'interprète dans le même thread. P>
Puis-je envelopper l'interpréteur de Python dans une classe C ++ et obtenir des services de deux instances de classe ou plus? P>
6 Réponses :
Vous pouvez, mais je vous recommanderais de ne pas ré-implémenter un interprète Python lorsqu'il y a une mise en œuvre standard. Utilisez
Boost Python utilise les API Python C. Est-il possible de démarrer l'interprète deux fois en appelant py_initialize ()?
callin py_initialize () code> deux fois ne fonctionnera pas bien, cependant py_newinterprètre code> peut fonctionner, en fonction de ce que vous essayez de faire. Lisez attentivement les documents, vous devez tenir la gil à l'appeler. P>
Je suppose que je ne vais pas avoir une réponse directe à ma question. Votre réponse m'a donné des intrants sur lesquels je peux commencer à travailler. Py_newinterpreter semble être la bonne option pour commencer à explorer le scénario que j'ai décrit. Basé sur cela, j'accepte votre réponse.
Je ne pense pas que vous soyez la première personne à vouloir faire cela, malheureusement, je crois que ce n'est pas possible. Êtes-vous en mesure d'exécuter les interperteurs Python comme des processus distincts et utilisez RPC? P>
J'ai utilisé py_newinterpreter pour différents interprètes dans différents threads, mais cela devrait également fonctionner pour plusieurs interprètes dans un fil:
dans le fil principal: p>
PyEval_RestoreThread(mainThreadState); Py_Finalize();
La réponse de Mosaik n'a pas fonctionné dans ma situation où mon module est un plugin à une application hôte qui initialise déjà Python. J'ai pu le faire travailler avec le code suivant. Quand j'ai appelé Pyeval_acquirelock () Code> Le programme bloqué et la fonction ne retournée pas. En outre, appeler pyeval_releasethread (mystate) code> semblait invalider l'interprète également. P> p>