![](/img/trans.png)
[英]Execution blocked by IOLoop.instance.start() in Tornado framework
[英]Why is 'tornado.ioloop.IOLoop.instance().start()' giving me an error?
我是龍卷風的新手。 我構建了這個非常基本的龍卷風請求處理程序,我期望它將在GET上返回“ Hello World”:
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
時,我得到:
你好,世界
如果我殺死它並注釋掉最后一行( #tornado.ioloop.IOLoop.instance().start()
),那么
所有文檔都說我需要最后一行,但似乎並不需要。 我應該離開它嗎? 誰能解釋我為什么看到這個?
注意1:app.listen的“幫助”明確指出:
請注意,調用此方法后,您仍然需要調用
IOLoop.current().start()
啟動服務器。
但是,如果我使用current()
或instance()
並且在文檔的其他地方說在這種情況下首選使用instance()
則會出現錯誤。
注意2:我絕對不會運行tornado
或該程序的另一個實例。 當我執行系統的干凈啟動然后運行代碼時,會發生這種情況。 我正在用IronPython控制台在Spyder內運行代碼,不確定那是否重要。
更新:我在運行python2的docker中在AWS上運行了此腳本。 我沒有看到任何錯誤(不確定是否只是被抑制了。)似乎這是我的Windows安裝所特有的? 我正在使用最新的龍卷風運行更新的WinPython。
IPython Notebook已經在運行Tornado IOLoop。 這就是為什么您看到“ IOLoop已經運行”錯誤的原因。 您還將注意到,IPython配置了一種特殊的循環ZMQIOLoop,它不是Tornado的默認循環類型。
在開發和測試Tornado Web應用程序時,最好不要使用IPython。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.