您好我有一个gui应用程序,一个简单的绘图程序,用PyQt 4编写,Python 2.7并在Windows上运行,下面是摘录
if __name__ == "__main__":
app=QApplication(sys.argv)
paint_app=main_paint_editor()#instantiate the gui
paint_app.show()
app.exec_()
这使得gui作为主线程开始。一旦用户界面启动并运行,就会有一个按钮,用于启动Flask应用程序,(CherryPy)
这是通过gui中的信号槽连接完成的,即
QtCore.QObject.connect(my_webserver_button,QtCore.SIGNAL("triggered()"),lauch_the_server)
函数launch_the_server旨在为flask应用程序启动一个单独的进程。由于gui和flask应用程序之间没有真正的依赖关系,我真的想要使用一个单独的进程而不是线程。 同时在试验时,在这种特殊情况下使用线程会让我的画面变得口齿不清。因此,我的目标是一个单独的过程。
为了在自己的进程中启动webserver和flask应用程序,我有
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()
当我使用eclipse在调试模式下运行时,这很好用。我得到一个单独的过程,烧瓶应用程序工作正常。 但是,当我使用py2exe构建我的整个应用程序的可执行文件时, 它根本不起作用。 我确实得到了一个运行的应用程序,但是当我尝试启动Web服务器时没有任何反应。我在exe中放了几个调试消息,没有打印出来。
我一开始认为这可能是一个令人讨厌的问题所以我用简单的代码替换了代码,即启动一个简单地将“hello”写入文本文件的过程 尽管从Eclipse调试器中可以正常工作,但可执行文件中没有任何操作。
如何从现有的GUI应用程序中启动单独的进程来运行其他功能,例如启动烧瓶应用程序?或者将文本写入文本文件?
答案 0 :(得分:0)
这个答案对我有用。
py2exe-with-multiprocessing-fails-to-run-the-processes
主要是
import multiprocessing
if __name__ == '__main__':
multiprocessing.freeze_support()
这个技巧看起来更像是py2exe的怪癖。感谢大家的期待