我开发了一个使用龙卷风用
python编写的相当广泛的http服务器.如果没有设置任何特殊内容,服务器将阻止请求,并且一次只能处理一个.请求基本上访问数据(mysql / redis)并在json中打印出来.在最坏的情况下,这些请求可能需要一秒钟的时间.问题是请求进来需要很长时间(3s),然后一个简单的请求立即进入,需要5ms处理.好吧,因为第一个请求将需要3秒,第二个请求在第一个请求完成之前不会启动.因此第二个请求需要处理> 3s.
我怎样才能让这种情况变得更好?无论其他请求如何,我都需要第二个简单的请求才能开始执行.我是python的新手,对apache / php更有经验,其中没有两个单独请求相互阻塞的概念.我已经调查了mod_python以模拟php示例,但这似乎也阻止了.我可以更改龙卷风服务器以获得我想要的功能吗?我读到的每个地方都说龙卷风非常适合处理多个同时发出的请求.
这是我正在使用的演示代码.我有一个睡眠命令,我用它来测试并发是否有效.睡觉是一种测试并发性的公平方法吗?
import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.gen
import time
class MainHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
@tornado.gen.engine
def handlePing1(self):
time.sleep(4)#simulating an expensive mysql call
self.write("response to browser ....")
self.finish()
def get(self):
start = time.time()
self.handlePing1()
#response = yield gen.Task(handlePing1)#i see tutorials around that suggest using something like this ....
print "done with request ...", self.request.path, round((time.time()-start),3)
application = tornado.web.Application([
(r"/.*", MainHandler),
])
if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(application)
port=8833;
http_server.listen(port)
print "listening on "+str(port);
tornado.ioloop.IOLoop.instance().start()
谢谢你的帮助!