2017-11-28 4 views
0
einen Prozess völlig unabhängig von der Einführungsprozess

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?

+0

Sind Sie auf der Suche nach einer doppelten Gabel? – webKnjaZ

Antwort

0

Diese Antwort funktionierte für mich.

py2exe-with-multiprocessing-fails-to-run-the-processes

Vor allem die

import multiprocessing 

if __name__ == '__main__': 
    multiprocessing.freeze_support() 

hat den Trick sieht aus wie es eine Marotte von py2exe war. Danke an alle für die Suche

Verwandte Themen