在单独的线程上关闭wxPython应用程序会遇到窗口警报

时间:2018-07-31 10:31:07

标签: python multithreading flask wxpython cefpython

我有一个Flask-SocketIO服务器,它在一个单独的线程中初始化GUI。

if __name__ == '__main__':

    if len(sys.argv) > 1 and sys.argv[1] == 'dev':
        print "Running Flask-SocketIO on dev mode"
    else:
        print "Running Flask-SocketIO on production mode"
        print 'Running Graphical User Interface...'
        thread.start_new_thread(display_react.main, ())
        print 'Initializing server'

    socketio.run(app, debug=False)

GUI基本上是使用wxPython的cefpthon3示例,但是它不是普通的浏览器,而是仅显示服务器提供的特定页面。目前,我想在关闭GUI时关闭整个应用程序。为此,我在服务器上创建了一条路由(称为)将关闭服务器。

@app.route('/shutdown', methods=['GET'])
def shutdown():
    server_request.shutdown()
    socketio.stop()
    print "Trying to close..."
    return 'Server shutting down...'

并且在关闭wxPython之前调用此路由。 但是,此错误在服务器关闭之前出现: enter image description here

有人可以帮助我解决或隐藏此问题吗?

1 个答案:

答案 0 :(得分:2)

wxPython几乎总是必须是主线程,这很可能就是您看到在wxIsMainThread上声明此错误的原因。一种简单的解决方法是将wxPython作为主线程/应用程序启动,并使其在线程中运行Flask。

我认为这样会更好。不过,您可以在wxPython Google小组中询问其他解决方法。