我可能不应该这样做,但我很好奇。给出下面的样板代码:
import cherrypy
class HelloWorld(object):
def index(self):
return "Hello World!"
index.exposed = True
cherrypy.quickstart(HelloWorld())
如果我在Ipython控制台中输入此内容,则服务器会提供该页面。如果我按下ctrl + c或cherrypy.server.stop()
,服务器就会停止。没问题。
然而,当我尝试在Spyder或Ipython Notebook中做同样的事情时,我可以提供" hello world"很好,但不能调用cherrypy.server.stop()或中断内核。
这是为什么?更好的是,还有办法吗?
答案 0 :(得分:2)
quickstart
方法阻止调用的线程。
基本上它会调用cherrypy.engine.block
。
但您也可以直接挂载您的应用程序并调用引擎上的方法。
>>> cherrypy.tree.mount(RootApp(), '')
>>> # you can do some config with cherrypy.config or on the mount third argument.
>>> cherrypy.engine.start()
>>> import webbrowser
>>> webbrowser.open('localhost:8080')
解释器不会被阻止。您可以使用cherrypy.engine.stop
停止引擎,然后重新启动。
但是,cherrypy是基于线程的,并且可能与另一个假设它控制所有线程的库发生冲突,所以请注意。
此外,如果您不调用cherrypy.engine.stop
并完成解释器,则解释器将“挂起”等待cherrypy
正在使用的线程。所以先停下发动机。
我刚刚使用IPython笔记本测试了它,并且工作正常。