Ich arbeite an der Einbettung von Python in C ++. In einem speziellen Fall benötige ich zwei separate Instanzen des Interpreters in demselben Thread.
Kann ich Python-Interpreter in eine C ++ - Klasse einbinden und Dienste von zwei oder mehr Klasseninstanzen holen?
Ich habe Py_NewInterpreter für verschiedene Interpreter in verschiedenen Threads verwendet, aber das sollte auch für mehrere Interpreter innerhalb eines Threads funktionieren:
Im Hauptthread:
%Vor%Für jede Interpreter-Instanz (in einem beliebigen Thread):
%Vor%Beachten Sie, dass Sie für jede Interpreterinstanz eine Variable myThreadState benötigen!
Endlich das Ziel im Hauptthread:
%Vor%Es gibt einige Einschränkungen bei der Verwendung mehrerer Interpreter-Instanzen (sie scheinen nicht völlig unabhängig zu sein), aber in den meisten Fällen scheint dies keine Probleme zu verursachen.
Callin Py_Initialize()
zweimal funktioniert nicht gut, aber Py_NewInterpreter
funktioniert , je nachdem, was du versuchst. Lesen Sie die Dokumente sorgfältig, Sie müssen die GIL halten, wenn Sie dies aufrufen.
Ich glaube nicht, dass Sie die erste Person sind, die das machen möchte, leider glaube ich, dass das nicht möglich ist. Können Sie die Python-Interpreter als separate Prozesse ausführen und RPC verwenden?
mosaiks Antwort funktionierte nicht in meiner Situation, in der mein Modul ein Plugin für eine Host-Anwendung ist, die Python bereits initialisiert. Ich konnte es mit dem folgenden Code arbeiten.
%Vor% Als ich PyEval_AcquireLock()
anrief, blockierte das Programm und die Funktion kehrte nicht zurück. Außerdem schien der Aufruf von PyEval_ReleaseThread(myState)
den Interpreter ebenfalls ungültig zu machen.
Tags und Links python c++ multithreading python-c-api python-embedding