部门内部的所有Web应用,restful服务等都是采用Python开发的,主要用到了bottle框架和django框架。
这两个框架都是采用的自身的Web Server运行的,在高负载的情况下响应比较慢。改为Tornado作为Web Server来承载应用。
1. Bottle应用
frombottle importrun
importargparse
if__name__=="__main__":
parser=argparse.ArgumentParser()
parser.add_argument("-H","--host",help="Host to bind the API server on", default="localhost", action="store", required=False)
parser.add_argument("-p","--port",help="Port to bind the API server on", default=8090, action="store", required=False)
args=parser.parse_args()
run(server="tornado",host=args.host, port=args.port)
#!/usr/bin/env python
fromtornado.options importoptions, define, parse_command_line
importdjango.core.handlers.wsgi
importtornado.httpserver
importtornado.ioloop
importtornado.web
importtornado.wsgi
importos
importsys
define('port',type=int, default=8000)
defmain():
os.environ.setdefault("DJANGO_SETTINGS_MODULE","web.settings")
parse_command_line()
wsgi_app=tornado.wsgi.WSGIContainer(django.core.handlers.wsgi.WSGIHandler())
tornado_app=tornado.web.Application([
(r'/static/(.*)', tornado.web.StaticFileHandler, {'path': os.path.join(os.path.join(os.getcwd()),"static")}),
('.*', tornado.web.FallbackHandler, dict(fallback=wsgi_app)),
])
server=tornado.httpserver.HTTPServer(tornado_app)
server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
if__name__ =='__main__':
main()
Django应用较为复杂,主要有几个点需要注意
os.environ.setdefault("DJANGO_SETTINGS_MODULE","web.settings")
Django的配置,不可缺少
(r'/static/(.*)', tornado.web.StaticFileHandler, {'path': os.path.join(os.path.join(os.getcwd()),"static")}),
('.*', tornado.web.FallbackHandler, dict(fallback=wsgi_app)),
前面