2012-04-03 10 views
1

Ich habe ein Problem mit meiner (Spiel-) Anwendung, die Boost.Python verwendet, wenn es um den Skriptteil geht. Ich habe einen Client-Thread und einen Server-Thread, die im selben Prozess ausgeführt werden, wenn Sie keine Verbindung zu einem externen Server herstellen.Zwei Python-Skripts parallel mit boost :: python ausführen

Dies ist, wo meine Probleme auftreten: Es scheint, als ob der Python-Interpreter nicht Skripts im Client-Thread parallel mit Skripts im Server-Thread ausführen kann, da es zum Absturz der Anwendung führt.

Meine Frage ist also: Gibt es eine Möglichkeit, zwei (oder mehr) Skripte parallel im Python-Interpreter auszuführen? Ich habe den ganzen Tag gesucht und eine Menge Informationen über Py_NewInterpreter gefunden, aber das löst mein Problem nicht, da es GIL verwendet. Ich möchte nicht, dass der Interpreter andere Skripts blockiert, da dies zu Verzögerungen auf dem Client führt/oder die Serverseite.

Antwort

1

Ab heute können Sie nicht vermeiden, GIL Interaktionen bei der Verwendung von Python-Threads im selben Prozess.

Vielleicht möchten Sie einen Blick auf multiprocessing-Modul, das Python-Prozesse leicht spawnen soll, damit nicht mit GIL interagieren.

Eine andere Option ist die explizite Freigabe der GIL, wenn es nicht in Ihren umschlossenen C/C++ - Funktionen benötigt wird. Dies kann mit den Funktionen PyEval_SaveThread und PyEval_RestoreThread erfolgen.

+1

Ausführliche Informationen über GIL Tiwtiling hier http://StackOverflow.com/Questions/8009613/Boost-Python-Not-Supporting-Parallelism/8011153#8011153 –