【发布时间】:2018-02-03 09:53:41
【问题描述】:
我已经编写了一个 Tornado HTTP 服务器,并尝试在 API 请求 http://localhost:8889/img 被命中后立即启动一个线程。一段时间后或立即出现 RuntimeError 异常。无法理解这种行为。请解释一下。
import tornado.ioloop
import tornado.web
import threading
import time
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
class img(tornado.web.RequestHandler):
def post(self):
t_img = threading.Thread(target=self.sendimg,)
t_img.start()
def sendimg(self):
while True:
self.write({"name":"vinay"})
print("sent")
time.sleep(0.5)
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
(r"/img", img),
])
if __name__ == "__main__":
app = make_app()
app = tornado.httpserver.HTTPServer(app)
app.listen(8889)
tornado.ioloop.IOLoop.current().start()
错误:
self.write({"name":"vinay"})
File "/Users/vinaykp/anaconda3/lib/python3.6/site-
packages/tornado/web.py", line 708, in write
raise RuntimeError("Cannot write() after finish()")
RuntimeError: Cannot write() after finish()
【问题讨论】:
标签: python multithreading websocket tornado httpserver