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()
。
我正在制作一个程序,该程序具有在主线程中使用 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()
。