在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


曾经的自己
记录开发中的点点滴滴,共同交流技术。

是1个执着、低调的人

1.9k 声望
161 粉丝
0 条评论
推荐阅读
C-如何快速生成Python的C扩展.md
真的好久没有分享技术文章了,主要是因为自己写的文章太过于小众,没想到自己竟然会分享这样一篇文章。这么一篇浓缩了自己多年来项目开发的实战经验。 不得不说,Python是一门很不错的编程语言。有时候,为了项目代码...

我勒个去阅读 1.6k

封面图
Ubuntu20.04 从源代码编译安装 python3.10
Ubuntu 22.04 Release DateUbuntu 22.04 Jammy Jellyfish is scheduled for release on April 21, 2022If you’re ready to use Ubuntu 22.04 Jammy Jellyfish, you can either upgrade your current Ubuntu syste...

ponponon1阅读 4k评论 1

日常Python 代码片段整理
1、简单的 HTTP Web 服务器 {代码...} 2、单行循环List {代码...} 3、更新字典 {代码...} 4、拆分多行字符串 {代码...} 5、跟踪列表中元素的频率 {代码...} 6、不使用 Pandas 读取 CSV 文件 {代码...} 7、将列表...

墨城2阅读 349

Python + Sqlalchemy 对数据库的批量插入或更新(Upsert)
由于不同数据库对这种 upsert 的实现机制不同,Sqlalchemy 也就不再试图做一致性的封装了,而是提供了各自的方言 API,具体到 Mysql,就是给 insert statement ,增加了 on_duplicate_key_update 方法。

songofhawk1阅读 2.1k评论 4

封面图
Unicode 正则表达式(qbit)
前言本文根据《精通正则表达式》和 Unicode Regular Expressions 整理。本文的示例默认以 Python3 为实现语言,用到 Python3 的 re 模块或 regex 库。基本的 Unicode 属性分类 {代码...} 基本的 Unicode 子属性Le...

qbit阅读 4.4k

打脸了兄弟们,Go1.20 arena 来了!
大家好,我是煎鱼。大概半年前,我写过一篇文章《Go 要违背初心吗?新提案:手动管理内存》。有兴趣了深入解的同学,可以再回顾一下。当时我们还想着 Go 团队应该不会接纳,至少不会那么快:懒得翻也可以看我再次...

煎鱼1阅读 3.3k

uwsgi 注意事项
http 和 http-socket 选项是完全不同的。第一个生成一个额外的进程,转发请求到一系列的worker (将它想象为一种形式的盾牌,与apache或者nginx同级),而第二个设置worker为原生使用http协议。

zed2015阅读 2.2k

是1个执着、低调的人

1.9k 声望
161 粉丝
宣传栏