Hallo habe ich eine GUI-Anwendung, ein einfaches Malprogramm, geschrieben mit PyQt 4, Python 2.7 und unter Windows ausgeführt wird, folgt ein AuszugStarten
if __name__ == "__main__":
app=QApplication(sys.argv)
paint_app=main_paint_editor()#instantiate the gui
paint_app.show()
app.exec_()
Dies ist die bekommt Gui begann als Hauptthread. Einmal ist die Benutzeroberfläche und läuft es auf eine Schaltfläche, die angeblich eine Flasche App zu starten, (CherryPy)
Dies über eine Signal-Slot-Verbindung in der GUI erfolgt, dh
QtCore.QObject.connect(my_webserver_button,QtCore.SIGNAL("triggered()"),lauch_the_server)
Die Funktion launch_the_server , soll einen separaten Prozess für die Flaschen-App starten. Da es keine echte Abhängigkeit zwischen der gui und der flask-App gibt, möchte ich wirklich einen separaten Prozess und keine Threads verwenden. Auch während des Experimentierens macht die Verwendung von Threads in diesem speziellen Fall meine Farbe gui stottern. Also ein separater Prozess ist mein Ziel.
Um den Web-Server und Kolben App im eigenen proccess zu beginnen habe ich
from cherrpy import wsgiserver
from multiprocessing import Process
def launch_the_server(self):
flask_process=Process(target=start_cherrypy, name="local_webserver")
flask_process.start()
flask_process.join()
def start_cherrypy(self):
localwsgi_server=wsgiserver.CherryPyWSGIServer(('localhost',1234),flask_app,numthreads=10,server_name="paintserver")
localwsgi_server.start()
, wenn ich im Debug-Modus unter Verwendung von Eclipse ausführen, das funktioniert gut. Ich bekomme einen separaten Prozess und die Flaschenapplikation funktioniert gut. Allerdings, wenn ich eine ausführbare Datei meiner gesamten Anwendung mit py2exe erstellen, funktioniert es überhaupt nicht. Ich bekomme eine Anwendung, die läuft, aber wenn ich versuche, den Webserver zu starten passiert nichts. Ich habe ein paar Debug-Meldungen in die EXE-Datei geschrieben, und keiner wird gedruckt.
Ich dachte, es könnte zunächst ein cherrypy Problem sein, also habe ich den Code durch etwas einfaches ersetzt, dh einen Prozess, der einfach "hallo" in eine Textdatei schreibt Nichts passierte in der ausführbaren Datei, aber es funktionierte gut aus Eclipse Debugger .
Wie kann ich einen separaten Prozess innerhalb einer vorhandenen GUI-Anwendung starten, um zusätzliche Funktionen wie das Starten einer Kolben-App auszuführen? oder Text in eine Textdatei schreiben?
Sind Sie auf der Suche nach einer doppelten Gabel? – webKnjaZ