樱桃和互动蟒蛇

时间:2015-07-07 03:44:48

标签: python ipython ipython-notebook cherrypy spyder

我可能不应该这样做,但我很好奇。给出下面的样板代码:

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()或中断内核。

这是为什么?更好的是,还有办法吗?

1 个答案:

答案 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笔记本测试了它,并且工作正常。