【发布时间】:2018-05-12 12:36:58
【问题描述】:
你好,我有一个 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 作为主线程启动。一旦 UI 启动并运行,就会有一个按钮用于启动 Flask 应用程序 (CherryPy)
这是通过 gui 中的信号槽连接完成的,即
QtCore.QObject.connect(my_webserver_button,QtCore.SIGNAL("triggered()"),lauch_the_server)
函数 launch_the_server 旨在为烧瓶应用程序启动一个单独的进程。由于 gui 和烧瓶应用程序之间没有真正的依赖关系,我真的想使用单独的进程而不是线程。 同样在试验时,在这种特定情况下使用线程使我的绘画 gui 结结巴巴。所以一个单独的过程是我的目标。
为了在自己的进程中启动网络服务器和烧瓶应用程序,我有
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 构建整个应用程序的可执行文件时, 它根本不起作用。 我确实得到了一个可以运行的应用程序,但是当我尝试启动网络服务器时,什么也没有发生。我在 exe 中放了几条调试消息,但没有打印出来。
一开始我认为这可能是一个小问题,所以我用一些简单的东西替换了代码,即启动一个简单地将“hello”写入文本文件的进程 尽管在 Eclipse 调试器中运行良好,但可执行文件中没有发生任何事情。
如何从现有的 GUI 应用程序中启动一个单独的进程来运行其他功能,例如启动烧瓶应用程序?还是将文本写入文本文件?
【问题讨论】:
-
你在寻找双叉吗?
标签: python-2.7 pyqt4 py2exe python-multiprocessing cherrypy