Seite 2 von 3

Re: C++ und Python

Verfasst: Mittwoch 15. März 2017, 19:40
von Sirius3
@Centurius: hast Du Dir das Modul traceback schonmal angeschaut?

Re: C++ und Python

Verfasst: Mittwoch 15. März 2017, 20:07
von Centurius
Ne, aber ich wollte die Fehlermeldung in C++ behandeln

Re: C++ und Python

Verfasst: Mittwoch 15. März 2017, 20:35
von BlackJack
@Centurius: Na dann musst Du mit der C-API das `traceback`-Modul importieren und beispielsweise die `format_exc()`-Funktion aufrufen. Du willst bestimmt nicht all das was es da schon in Python gibt, mühsam in C++ nachprogrammieren. Das importieren und verwenden wäre mit persönlich über die C-API ja schon ein bisschen zu nervig. Ich würde so viel wie möglich versuchen in Python-Code zu verschieben. :-)

Re: C++ und Python

Verfasst: Mittwoch 15. März 2017, 21:28
von Centurius
Ach so. Okay, das probiere ich mal aus. Danke

Als letztes würde ich noch wissen wie ich ein PyObject das ein Boolean ist in einen C boolean caste.

Re: C++ und Python

Verfasst: Mittwoch 15. März 2017, 21:40
von BlackJack
Casten geht natürlich nicht, aber Du kannst den Wahrheitswert eines Python-Objekts mit PyObject_IsTrue() ermitteln.

Re: C++ und Python

Verfasst: Mittwoch 15. März 2017, 21:49
von Centurius
Vielen Dank für die Hilfe bei meinen ganzen Fragen!!!
Das ist ein super Forum! Sehr Hilfsbereit!

Ich hoffe ich habe nicht zu viele doofe Fragen gestellt :wink:

Re: C++ und Python

Verfasst: Samstag 18. März 2017, 20:17
von Centurius
Heute ist noch ein Problem entstanden.

Und zwar habe ich in mein Python Script, das mit PyImport_Import geladen wird, einen Thread. Doch dieser Thread wird nur so lange ausgeführt, wie etwas in dem Python Script außerhalb des Thread durch geführt wird.
Kann man das so programmieren, dass der Thread weiter ausgeführt wird?

Re: C++ und Python

Verfasst: Samstag 18. März 2017, 22:08
von BlackJack
@Centurius: Damit Python-Code in CPython läuft, muss halt der Python-Interpreter laufen. Das tut der nicht von alleine.

Re: C++ und Python

Verfasst: Samstag 18. März 2017, 22:42
von Centurius
Meinst du Py_Initialize? Verstehe nicht so richtig was du mir sagen möchtest.

Also an sich läuft alles. Nur die Threads in Python stoppen

Re: C++ und Python

Verfasst: Sonntag 19. März 2017, 00:13
von BlackJack
@Centurius: Damit die Threads laufen muss der Python-Interpreter laufen. Also dort der Hauptthread der den Bytecodeinterpreter am laufen hält und beispielsweise dafür sorgt das alle x Bytecodes der Thread gewechselt werden kann, die Speicherbereinigung ausgeführt wird, und der eventuelle Signale verarbeitet.

Re: C++ und Python

Verfasst: Sonntag 19. März 2017, 12:13
von Centurius
Und wie realisiere ich das am besten?

Re: C++ und Python

Verfasst: Sonntag 19. März 2017, 12:24
von Sirius3
@Centurius: dazu müßte man wissen, wie Du die Einbindung von Python in Dein C++-Programm gestalten willst. Wenn Du multithreaded arbeitest, mußt Du aufpassen, dass immer, wenn Du etwas im Python-Bereich ändern willst, das GIL anfordern mußt und entsprechend auch wieder freigeben, wenn Du fertig bist.

Re: C++ und Python

Verfasst: Dienstag 28. März 2017, 14:30
von Centurius
Es ist so das ich eine DLL erstelle. Diese DLL lädt mehrere Python Module um als eine Schnittstelle zwischen einem Programm und mehreren Python Modulen zu fungieren.

Bedeutetet das Programm ruft nach dem Laden der Python Module immer mal auf deren Funktionen zu. Das läuft alles bisher ohne Threads, was bedeutet, wenn man eine while true Schleife einbaut, wäre das Programm in der Python Funktion gefangen und benutze ich Threads wird der gesleept sobald die Funktion in dem Python Module durch ist.

Wie gehe ich nun am besten vor um das Problem zu lösen?

Re: C++ und Python

Verfasst: Dienstag 28. März 2017, 15:52
von __deets__
Keine while-schleife erstellen? Kooperativer Code waere denke ich die zu bevorzugende Loesung.

Ansonsten koenntest du versuchen, aus c++ in einem Timer immer wieder einen Callback in Python aufzurufen, der letztlich nix tut, aber eben Interpreter-Hausarbeit (implizit) verrichtet. So zumindest verstehe ich das Problem.

Re: C++ und Python

Verfasst: Dienstag 28. März 2017, 18:18
von Centurius
Ne ich würde schon gerne richtig Threads benutzen.

Re: C++ und Python

Verfasst: Mittwoch 29. März 2017, 10:57
von __deets__
Dir ist klar, dass die in Python ueblicherweise keinen Gewinn in punkto Performance bringen? Wie dem auch sei, auch fuer den Fall habe ich ja eine Idee vorgeschlagen. Ob die funktioniert wirst du schon ausprobieren muessen.

Re: C++ und Python

Verfasst: Mittwoch 29. März 2017, 12:13
von Sirius3
@Centurius: Python macht da auch keine Magie. Wenn Du in Python einen Thread erzeugst, ist das ein ganz normaler Thread vom Betriebssystem. Du mußt nur darauf achten, dass, wenn Du in Deinem C++-Teil bist, das GIL nicht gelocked ist und wenn Du wieder eine Python-Funktion aufrufst, das GIL wieder aquiriert wird. Was hast Du denn schon ausprobiert, und wo verhält sich das Programm nicht so wie Du es erwartest?

Re: C++ und Python

Verfasst: Mittwoch 29. März 2017, 17:10
von Centurius
Es stoppt den Thread leider solange wie die C++ nicht in dem Python Script tätig ist.

Sprich ich importiere ein Python Script, das ein Thread startet. Nachdem dem der Thread gestartet wurde wird er schlafen gelegt, bis ich eine Funktion in dem Python Script ausführe und sobald die Funktion durch geführt wurde, wird der Thread wieder schlafen gelegt.

Re: C++ und Python

Verfasst: Mittwoch 29. März 2017, 17:13
von __deets__
Das haben wir schon verstanden. Was passiert, wenn du periodisch aus deinem C++ Haupt-Thread in den Python-Interpreter verzweigst? Eine einfache nop-Funktion, deren Zweck nur darin besteht, dem Interpreter ein bisschen CPU-Zyklen-Luft schnuppern zu lassen.

Re: C++ und Python

Verfasst: Mittwoch 29. März 2017, 17:26
von Centurius
Wenn du mir verrätst wie, dann sage ich dir auch was passiert.