【问题标题】:Launch a process completely independent of the launching process启动一个完全独立于启动进程的进程
【发布时间】: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


【解决方案1】:

这个答案对我有用。

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

主要是

import multiprocessing

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

这个技巧看起来更像是 py2exe 的一个怪癖吗?感谢大家观看

【讨论】:

    猜你喜欢
    • 2014-07-15
    • 2015-02-21
    • 2012-11-15
    • 2010-10-30
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    相关资源
    最近更新 更多