之前一直很想知道,在Tornado上是如何运行其他WSGI应用的,例如利用Twisted,可以作为Flask、Bottle、Django运行的服务器。近日在查看tornado的官方文档时,总算找到了对应的方式了。
在Tornado中,我们可以通过wsgi模块下的WSGIContainer类来实现这样的需求。这里,我们使用Bottle作为例子,来查看这个过程。
from bottle import Bottle
app = Bottle()
@app.route('/'):
def index():
return 'Hello World'
现在,我们编写了1个简单的访问根URL时输出1个Hello World的简单应用了。
接下来,我们让这个Bottle的应用在tornado上运行,我们引入tornado库:
import tornado
然后将要托管的应用以参数的形式传入到WSGIContainer类中:
container = tornado.wsgi.WSGIContainer(app)
接下来,我们定义1个HTTP服务器,用于提供服务:
http_server = tornado.httpserver.HTTPServer(container)
紧接着,我们定义这个服务器监听的端口:
http_server.listen(8888)
最后,我们启动这个服务器:
tornado.ioloop.IOLoop.current().start()
此时访问127.0.0.1:8888
,将看到1个Hello World的字符串。
需要注意的是,由于Tornado的并发模型是建立在单线程异步执行的基础上的,因此它运行1个WSGI应用比使用多线程的WSGI服务器要弱很多。当然,这种方式在Tornado和WSGI在相同进程时有用,否则将减少可扩展性。
相比而言,twisted的WSGI服务器使用多进程的方式运行的,因此在项目开发中,还是以twisted为主。
参考文章:
http://www.tornadoweb.org/en/stable/wsgi.html#running-wsgi-apps-on-tornado-servers
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。