ich habe ein kleines Problem mit meiner eingebetteten Python Anbindung. Ich habe so gut wie fast alles gewrappt und stelle alles in Python zur Verfügung.
Mein Ziel: Ich möchte es möglich machen, mehrere Skripte gleichzeitig laufen zu lassen.
Mein Problem: Python ist ja nicht Thread-safe?
Was habe ich bisher gemacht. Ich klicke in meinem Programm auf einen Eintrag und öffne damit das entsprechende Python Skript. Jetzt wird ein neuer Thread geöffnet und darin der komplette Python Teil ausgeführt, heißt:
Code: Alles auswählen
PyObject *f_globals, *f_locals, *mod, *rv;
mod = PyImport_ImportModule("__main__");
if (!mod)
return;
f_globals = PyModule_GetDict(mod);
f_locals = PyDict_New();
PyDict_Update(f_locals, f_globals);
if (!f_locals) {
Py_DECREF(mod);
PyErr_Print();
return;
}
rv = PyRun_String(<der python code>, Py_file_input, f_locals, f_locals);
GePrint("ZUENDE");
if (!rv)
PyErr_Print();
Py_XDECREF(rv);
Py_DECREF(mod);
Py_DECREF(f_locals);
Code: Alles auswählen
from test import *
class test(yourGUI):
MYBUTTON = 0
def create_gui(self):
self.set_title("Dialog I")
MYBUTTON = self.add_button("Ich habe einen Namen",150,15,self.button_click)
return True
def button_click(self):
println("ich bin der button")
if __name__ == "__main__":
fn = test()
fn.open(True)
Das Problem ist, dass er beim öffnen der GUI (also bei fn.open(True) das Objekt erzeugt und sofort das Skript beendet weil danach ja nichts mehr kommt und deallokiert danach sofort wieder alles. Gibts eine Möglichkeit wie bei wxPython eine art mainloop einzubauen? Wie funktioniert dieser?
Gibts eine Möglichkeit Python einfach Thread-safe zu machen?
Danke schön!