我是龙卷风的新手。我建立了这个非常基本的龙卷风请求处理程序,我期望它会返回" Hello World"在GET上:
import tornado
import tornado.web
class HelloWorldHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self, *args):
self.write("Hello World")
self.finish()
if __name__=="__main__":
app = tornado.web.Application([
(r'/help', HelloWorldHandler),
], cookie_secret="__SHH_DONT_TELL__")
app.listen(5001)
tornado.ioloop.IOLoop.instance().start()
但是当我跑步时,我得到了:
Traceback (most recent call last):
File "<ipython-input-1-4bf86d0b596e>", line 1, in <module>
runfile('D:/Python/notebooks/my_tornado/temp.py', wdir='D:/Python/notebooks/my_tornado')
File "C:\WinPython-64bit-3.5.2.3\python-3.5.2.amd64\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
execfile(filename, namespace)
File "C:\WinPython-64bit-3.5.2.3\python-3.5.2.amd64\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "D:/Python/notebooks/my_tornado/temp.py", line 23, in <module>
tornado.ioloop.IOLoop.instance().start()
File "C:\WinPython-64bit-3.5.2.3\python-3.5.2.amd64\lib\site-packages\zmq\eventloop\ioloop.py", line 162, in start
super(ZMQIOLoop, self).start()
File "C:\WinPython-64bit-3.5.2.3\python-3.5.2.amd64\lib\site-packages\tornado\ioloop.py", line 752, in start
raise RuntimeError("IOLoop is already running")
RuntimeError: IOLoop is already running
然而,它似乎有效。当我从Chrome点击http://localhost:5001/help
时,我得到:
Hello World
如果我将其删除并注释掉最后一行(#tornado.ioloop.IOLoop.instance().start()
),那么
所有文档都说我需要最后一行,但它看起来并不像我。我应该把它关掉吗?任何人都可以解释为什么我会看到这个吗?
NOTE1:&#39; help&#39;对于app.listen明确说明:
请注意,调用此方法后仍需要调用
IOLoop.current().start()
启动服务器。
但是,如果我使用current()
或instance()
以及文档中的其他地方,我会收到错误信息,在这种情况下首选使用instance()
。
注意2:我绝对没有运行tornado
或该程序的另一个实例。当我对系统进行干净启动然后运行代码时会发生这种情况。我正在使用IronPython控制台在Spyder中运行代码,不确定它是否重要。
更新:我在运行python2的docker里面的AWS上运行了这个脚本。我没有看到任何错误(不确定它们是否被抑制。)这似乎是特定于我的Windows安装?我正在使用最新的龙卷风运行更新的WinPython。
答案 0 :(得分:5)
IPython Notebook已经在运行Tornado IOLoop。这就是为什么你看到&#34; IOLoop已经在运行&#34;错误。您还会注意到IPython已经配置了一种特殊的循环ZMQIOLoop,它不是Tornado的默认循环类型。
在开发和测试Tornado Web应用程序时,最好不要使用IPython。