【发布时间】:2011-06-02 01:54:41
【问题描述】:
刚开始使用 Tornado,不知道我做错了什么,但我根本无法让它线程化,这是我正在测试的代码。
import tornado.ioloop
import tornado.web
import time
from threading import Timer
class MainHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self):
t = Timer(5.0, self.on_response)
t.start()
print 'thread started'
def on_response(self):
self.write(str(time.time()))
self.finish()
application = tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
如果我运行它,它可以工作,但它会阻塞整个网络服务器 5 秒,所以如果我尝试快速连续两次加载此页面,它将打印“线程启动”,等待 5 秒,第一个浏览器将加载,然后它会再次打印“线程启动”,再等待 5 秒,然后将页面发送给第二个浏览器,总共需要 10 秒。
即使从 tornado 网站运行非阻塞示例,我也遇到了这个问题。有什么想法吗?
尝试使用 python 2.6 和 2.7,来自 easy_install 的 Tornado 1.2.1。
【问题讨论】:
标签: python multithreading tornado