在Tornado上运行WSGI应用
之前一直很想知道,在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
曾经的自己
C-如何快速生成Python的C扩展.md
我勒个去阅读 1.6k
Ubuntu20.04 从源代码编译安装 python3.10
ponponon赞 1阅读 4k评论 1
日常Python 代码片段整理
墨城赞 2阅读 349
Python + Sqlalchemy 对数据库的批量插入或更新(Upsert)
songofhawk赞 1阅读 2.1k评论 4
Unicode 正则表达式(qbit)
qbit阅读 4.4k
打脸了兄弟们,Go1.20 arena 来了!
煎鱼赞 1阅读 3.3k
uwsgi 注意事项
zed2015阅读 2.2k
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。