C++ und Python

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@__deets__: das bringt gar nichts, weil die nop-Operation nicht dafür sorgt, dass andere Threads ausgeführt werden.

@Centurius: Du hast noch kein bißchen auf meinen Vorschlag reagiert, den ich gemacht habe. :evil:
Wenn Du eine Anbindung von Python an C/C++ haben willst, dann solltest Du Dich auch mit der Dokumentation dazu etwas beschäftigen.
Also hier lesen, das sollte Dir alle Fragen beantworten.

Beispiel:
[codebox=c file=Unbenannt.c]
#include <Python.h>

PyThreadState* global_thread;

int main(int argc, char *argv[])
{
Py_SetProgramName(argv[0]); /* optional but recommended */
Py_Initialize();
PyRun_SimpleString("import time,threading\n"
"def gg():\n"
" for i in range(15): print i;time.sleep(1)\n"
"threading.Thread(target=gg).start()\n");
global_thread = PyThreadState_Get();
PyEval_ReleaseThread(global_thread);
printf("Start\n");
sleep(10);
printf("Stop\n");
PyEval_AcquireThread(global_thread);
Py_Finalize();
return 0;
}[/code]
Centurius
User
Beiträge: 22
Registriert: Dienstag 14. März 2017, 14:09

Ich komme dem ganzen näher. Ein Thread läuft weiter wie er soll.

Nun habe ich das Problem, wenn ich ein weiteres Python Script importiere es abstürzt, wenn ich es vor PyEval_AcquireThread(global_thread); importiere.

Wahrscheinlich muss ich jetzt den Thread stoppen, das Python Script importieren und dann den Thread weiterlaufen lassen oder?
Wenn ja wie mache ich das?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Centurius: alle Threads laufen im Hintergrund, aber jedesmal wenn Du vom Hauptprogramm aus eine Python-Funktion aufrufen willst, mußt Du erst Acquire und wenn Du fertig bist Release aufrufen. Hast Du die Dokumentation gelesen und verstanden?
Centurius
User
Beiträge: 22
Registriert: Dienstag 14. März 2017, 14:09

Das hatte ich auch so verstanden, aber es funktionierte leider nicht so.
Ich probiere es heute nachmittag nochmal.

Muss ich vor dem Release nochmal global_thread = PyThreadState_Get(); ausführen?
Was ist wenn in dem dazwischen ausgeführten Python Code auch ein Thread ist?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Centurius: ohne den Code zu kennen, WAS Du tatsächlich ausprobiert hast, ist Dir nicht zu helfen.
Antworten