首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么'tornado.ioloop.IOLoop.instance().start()‘给了我一个错误?

为什么'tornado.ioloop.IOLoop.instance().start()‘给了我一个错误?
EN

Stack Overflow用户
提问于 2017-03-13 17:35:31
回答 1查看 2.3K关注 0票数 5

我对龙卷风很陌生。我构建了一个非常基本的龙卷风请求处理程序,我期望在GET上返回"Hello“:

代码语言:javascript
复制
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()

但当我运行它时,我得到:

代码语言:javascript
复制
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()),那么

  1. 我不明白这个错误
  2. 看起来一切还是正常的。

所有的医生都说我需要最后一行,但我似乎不需要。我该把它停下来吗?有人能解释我为什么看到这个吗?

NOTE1: app.listen的“帮助”明确声明:

注意,在调用此方法之后,仍然需要调用 IOLoop.current().start()启动服务器。

但是,如果我使用current()instance(),并且在文档中的其他地方,它表示在这种情况下使用instance()是首选的错误。

NOTE2:我绝对不会运行tornado或这个程序的另一个实例。当我对系统执行干净的引导,然后运行代码时,就会发生这种情况。我正在使用IronPython控制台运行Spyder内部的代码,不确定这是否重要。

更新:我在运行python2的坞内的AWS上运行了这个脚本。我没有看到任何错误(不确定它们是否刚刚被抑制)。似乎这是我的Windows安装特有的吗?我正在用最新的龙卷风运行一个更新的WinPython。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-13 20:27:00

IPython笔记本已经在运行龙卷风IOLoop了。这就是为什么您会看到"IOLoop已经在运行“错误。您还会注意到,IPython已经配置了一种特殊类型的循环,即ZMQIOLoop,这不是龙卷风的默认循环类型。

在开发和测试Tornado应用程序时最好不要使用IPython。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42769929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档