欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 浅谈Python库之Tornado

浅谈Python库之Tornado

2025/2/24 2:49:11 来源:https://blog.csdn.net/a876106354/article/details/144203275  浏览:    关键词:浅谈Python库之Tornado

一、Tornado的基本介绍

        Tornado是一个开源的Python Web框架和异步网络库,最初由FriendFeed开发,后被Facebook收购。它以其高性能和非阻塞I/O特性在Web开发领域备受青睐,特别适合处理大量并发连接的应用,如聊天应用、实时数据处理和WebSocket服务。

二、Tornado的核心特性

  • 异步I/O:Tornado使用非阻塞网络I/O,可以同时处理成千上万个连接,非常适合长连接和实时通信。
  • Web框架:Tornado提供了一个简单的Web框架,可以轻松创建RESTful API和Web应用。
  • 模板引擎:Tornado内置了一个简单的模板引擎,用于生成HTML页面。
  • WebSocket支持:Tornado原生支持WebSocket,可以用于构建实时Web应用。

三、Tornado的简单使用

1. 安装

Tornado可以通过pip命令进行安装:

pip install tornado

安装完成后,可以通过以下命令验证是否安装成功:

python -c "import tornado; print(tornado.version)"

如果成功输出版本号,则表示安装成功。

2. 基础用法

创建一个简单的HTTP服务器

以下是一个简单的Tornado应用,响应HTTP请求:

import tornado.ioloop
import tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self):self.write("Hello, Tornado!")def make_app():return tornado.web.Application([(r"/", MainHandler),])if __name__ == "__main__":app = make_app()app.listen(8888)print("Server is running at http://localhost:8888")tornado.ioloop.IOLoop.current().start()

在浏览器中访问 http://localhost:8888,你会看到页面显示"Hello, Tornado!"。

使用模板

Tornado支持使用模板引擎来渲染HTML页面。以下是一个使用模板引擎的示例:

import tornado.ioloop
import tornado.webclass TemplateHandler(tornado.web.RequestHandler):def get(self):data = {"title": "Tornado Template", "content": "Hello, Tornado!"}self.render("template.html", **data)if __name__ == "__main__":app = tornado.web.Application([(r"/template", TemplateHandler),], template_path="templates")app.listen(8888)tornado.ioloop.IOLoop.current().start()

在这个示例中,template.html 是模板文件,位于 templates 目录下。

WebSocket支持

Tornado提供了强大的WebSocket支持,使得实时Web应用的构建变得更加容易。以下是一个简单的WebSocket示例:

import tornado.ioloop
import tornado.web
import tornado.websocketclass WebSocketHandler(tornado.websocket.WebSocketHandler):def open(self):print("WebSocket Connection Opened")def on_message(self, message):self.write_message(f"You said: {message}")def on_close(self):print("WebSocket Connection Closed")if __name__ == "__main__":app = tornado.web.Application([(r"/websocket", WebSocketHandler),])app.listen(8888)tornado.ioloop.IOLoop.current().start()

四、Tornado的高级用法

1. 异步I/O

使用Tornado的异步I/O特性,可以编写非阻塞的网络应用。以下是一个使用异步HTTP客户端的示例:

import tornado.ioloop
import tornado.web
from tornado.httpclient import AsyncHTTPClientasync def fetch_url(url):http_client = AsyncHTTPClient()response = await http_client.fetch(url)return response.bodyclass MainHandler(tornado.web.RequestHandler):async def get(self):url = "http://httpbin.org/get"response = await fetch_url(url)self.write(response)def make_app():return tornado.web.Application([(r"/", MainHandler),])if __name__ == "__main__":app = make_app()app.listen(8888)tornado.ioloop.IOLoop.current().start()

2. WebSocket支持

以下是一个WebSocket服务端的示例,它能够接收客户端的消息并回显:

import tornado.ioloop
import tornado.web
import tornado.websocketclass WebSocketHandler(tornado.websocket.WebSocketHandler):def open(self):print("WebSocket opened")def on_message(self, message):self.write_message(u"You said: " + message)def on_close(self):print("WebSocket closed")def make_app():return tornado.web.Application([(r"/websocket", WebSocketHandler),])if __name__ == "__main__":app = make_app()app.listen(8888)tornado.ioloop.IOLoop.current().start()

3. UI模块

以下是一个使用UI模块的示例,它允许在模板中调用模块:

import tornado.ioloop
import tornado.webclass Entry(tornado.web.UIModule):def render(self, entry, show_comments=False):return self.render_string("module-entry.html", entry=entry, show_comments=show_comments)def make_app():return tornado.web.Application([(r"/", HomeHandler),], ui_modules=globals())class HomeHandler(tornado.web.RequestHandler):def get(self):self.render("home.html")if __name__ == "__main__":app = make_app()app.listen(8888)tornado.ioloop.IOLoop.current().start()

4. 异步数据库操作

以下是一个使用异步Peewee操作数据库的示例:

import peewee_async
from peewee import *db = peewee_async.MySQLDatabase('tornado_db', host='127.0.0.1', port=3306, user='root', password='xxx')
manager = peewee_async.Manager(database=db)class Company(Model):name = CharField(verbose_name='公司名称')class Meta:database = dbclass Music(Model):name = CharField(verbose_name='音乐名称')company = ForeignKeyField(Company, backref='musics')class Meta:database = dbasync def create_data():await manager.create(Music, name='逆战', singer='张杰', company=1)if __name__ == "__main__":import asyncioloop = asyncio.get_event_loop()loop.run_until_complete(create_data())loop.close()

5. 配置选项

以下是一个使用Tornado配置选项的示例:

from tornado.options import define, options, parse_command_linedefine("port", default=8888, help="run on given port", type=int)if __name__ == "__main__":parse_command_line()app = tornado.web.Application([(r"/", MainHandler),])app.listen(options.port)tornado.ioloop.IOLoop.current().start()

6. 异步HTTP客户端

以下是一个使用异步HTTP客户端的示例:

from tornado.httpclient import AsyncHTTPClientAsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient")http_client = AsyncHTTPClient()
response = http_client.fetch("http://httpbin.org/get")

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词