Tkinter 和 CherryPy 并发

Tkinter and CherryPy concurrency

我正在制作一个程序,该程序具有在主线程中使用 tkinter 的接口。一旦用户单击按钮 运行,cherrypy 服务器就会在另一个线程中启动。

...
def startServer():

    class HelloWorld(object):

    @cherrypy.expose
    def printText(self):
        print("Printing Some Text")
        return {"sucess": "true"}

    cherrypy.config.update({
        'server.socket_host': '127.0.0.1',
        'server.socket_port': 8080,
    })
    cherrypy.quickstart(HelloWorld(), '/', conf)


def serverExec():

    t = threading.Thread(target=startServer, args=())
    t.start()


root = Tk()
button = Button(top, text="Run", command=serverExec)
button.grid(row=0, column=0, columnspan=2, sticky=W + E)
root.mainloop()

我想知道如何在单击按钮时停止 Cherrypy 线程 "Stop"。我不知道如何与 Cherrypy 线程通信,因为 cherrypy 会在循环中阻塞它。

不要调用快速启动。阅读它的(简短!)code 并使用您需要的部分。在这种情况下,只需停止 engine.block() 调用,它就不会阻塞(并且您不需要在单独的线程中启动它)。

然后从您的 Stop 按钮调用 engine.stop()(不是 exit-- 那是为了关闭进程)。如果愿意,可以从另一个按钮再次调用 engine.start()