最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python web框架之tornado的使用

 更新時(shí)間:2023年05月16日 09:35:40   作者:太陽(yáng)打傘  
tornado是一個(gè)用Python語(yǔ)言寫成的Web服務(wù)器兼Web應(yīng)用框架,本文主要介紹了Python web框架之tornado的使用,具有一定的參考價(jià)值,感興趣的可以了解一下

什么是Tornado

官網(wǎng):www.tornadoweb.org/

https://github.com/tornadoweb/tornado

tornado是Python界中非常出名的一款Web框架,和Flask一樣它也屬于輕量級(jí)的Web框架。

Tornado全稱Tornado Web Server,是一個(gè)用Python語(yǔ)言寫成的Web服務(wù)器兼Web應(yīng)用框架,由FriendFeed公司在自己的網(wǎng)站FriendFeed中使用,被Facebook收購(gòu)以后框架在2009年9月以開(kāi)源軟件形式開(kāi)放給大眾。

但是從性能而言tornado由于其支持異步非阻塞的特性所以對(duì)于一些高并發(fā)的場(chǎng)景顯得更為適用。

tornado簡(jiǎn)潔,高效,能夠支持WebSocket,其I/O多路復(fù)用采用epoll模式來(lái)實(shí)現(xiàn)異步,并且還有Future期程對(duì)象來(lái)實(shí)現(xiàn)非阻塞。

Tornado有著優(yōu)異的性能。它試圖解決C10k問(wèn)題,即處理大于或等于一萬(wàn)的并發(fā)。

Django、Flask、Tornado的對(duì)比,以及tornado應(yīng)用場(chǎng)景

Django:
優(yōu)點(diǎn):大而全的框架,全自動(dòng)化的管理后臺(tái)帶來(lái)超高的開(kāi)發(fā)效率,豐富的組件
缺點(diǎn):厚重,與他自己的ORM高耦合
分析:Django提供的方便,也意味著Django內(nèi)置的ORM跟框架內(nèi)的其他模塊耦合程度高。應(yīng)用程序必須使用Django內(nèi)置的ORM,否則就不能享受到框架內(nèi)提供的種種基于其ORM的便利;理論上可以切換掉其ORM模塊,但這就相當(dāng)于要把裝修完畢的房子拆除重新裝修,倒不如一開(kāi)始就去毛胚房做全新的裝修。Django的賣點(diǎn)是超高的開(kāi)發(fā)效率,其性能擴(kuò)展有限。

總結(jié):成熟,穩(wěn)定,開(kāi)發(fā)效率高,相對(duì)于Flask,Django的整體封閉性比較好,適合做企業(yè)級(jí)網(wǎng)站的開(kāi)發(fā)。python web框架的先驅(qū),第三方庫(kù)豐富。

Tornado:

優(yōu)點(diǎn):輕量、異步非阻塞IO處理方式、出色的抗負(fù)載能力、協(xié)程帶來(lái)優(yōu)異的處理性能
缺點(diǎn):沒(méi)有ORM,提供的支持和模板少,缺少后臺(tái)支持,對(duì)小型項(xiàng)目來(lái)說(shuō)開(kāi)發(fā)速度沒(méi)有django快
分析:tornado所謂的“缺點(diǎn)”是由它的設(shè)計(jì)理念決定的,設(shè)計(jì)上就決定它是一個(gè)小而精的http服務(wù)器+輕量級(jí)web框架,高并發(fā)處理才是它真正擅長(zhǎng)的

總結(jié): tornado的并發(fā)性能最好,而且最為輕量級(jí),它最出名的異步非阻塞的設(shè)計(jì)方式,性能強(qiáng)悍是 Tornado 的名片。

django大而全、flask小而精、tornado性能高。

django ORM雖然面向?qū)ο髞?lái)操作數(shù)據(jù)庫(kù),但是它的效率很低,使用外鍵來(lái)聯(lián)系表與表之間的查詢。

相比于Django和Flask,Tornado的市場(chǎng)占有率可以說(shuō)是極低的,三個(gè)框架的特點(diǎn)很明顯。

python在做web方面可不是一個(gè)主力軍,更多被用來(lái)做一些小型企業(yè)門戶網(wǎng)站或者工具網(wǎng)站,要高并發(fā)干啥,基本沒(méi)有用武之地啊。真要沖著大并發(fā)的業(yè)務(wù)去,也不會(huì)選python來(lái)做web啊。所以,我覺(jué)得這就是Tornado不怎么受歡迎的原因。

tornado主要是用于websocket/tcp這些長(zhǎng)連接數(shù)據(jù)流的場(chǎng)景, 結(jié)合async非常好用, python語(yǔ)言里暫時(shí)應(yīng)該沒(méi)有更好的替代框架, 如果是CRUD的web或者restful接口, 那確實(shí)跟django/django-rest-framework那些比完全沒(méi)有優(yōu)勢(shì)。

總結(jié):tornado主要應(yīng)用場(chǎng)景還是用于websocket/tcp這些長(zhǎng)連接數(shù)據(jù)流的場(chǎng)景, 結(jié)合async非常好用, python語(yǔ)言里暫時(shí)應(yīng)該沒(méi)有更好的替代框架。

安裝

輸入命令:

pip install tornado

使用

Tornado入門程序 

db.py

# 數(shù)據(jù)庫(kù)工具類
import peewee
import peewee_async
from datetime import datetime
# 創(chuàng)建數(shù)據(jù)庫(kù)鏈接對(duì)象
database = peewee_async.PooledMySQLDatabase("scoial", host="127.0.0.1",
                                            port=3306, user="root", password="123456")
# 基類
class BaseModel(peewee.Model):
    id = peewee.IntegerField(primary_key=True, unique=True, constraints=
    [peewee.SQL('AUTO_INCREMENT')])
    # 入庫(kù)時(shí)間
    create_time = peewee.DateTimeField(default=datetime.now,
                                       help_text="入庫(kù)時(shí)間")
    # 重寫父類方法
    def save(self, *args, **kwargs):
        # 判斷什么時(shí)候賦值入庫(kù)方法
        if self._pk is None:
            # 賦值
            self.create_time = datetime.now()
        return super(BaseModel, self).save(*args, **kwargs)
    class Meta:
        # 傳遞數(shù)據(jù)庫(kù)連接
        database = database
# 用戶表
class UserModel(BaseModel):
    email = peewee.CharField(null=False, unique=True, max_length=100)
    password = peewee.CharField(null=False, max_length=567)
    state = peewee.IntegerField(null=False, default=0)
    class Meta:
        # 聲明表明
        db_table = "user"
if __name__ == '__main__':
    # 創(chuàng)建表
    UserModel.create_table(True)
    # 刪除表
    # UserModel.drop_table(True)
    # 添加測(cè)試數(shù)據(jù)

 main.py

import tornado.ioloop
import tornado.web
import redis
# 導(dǎo)入基礎(chǔ)類
from base import BaseHandler
# 導(dǎo)入數(shù)據(jù)庫(kù)操作類
from db import database
import os
from tornado.options import define, options
define('port', default=8000, help='default port',type=int)
import peewee_async
# import aioredis
import asyncio
# 導(dǎo)入用戶模塊
import user
# 設(shè)置tornado靜態(tài)文件夾目錄
static_path = os.path.join(os.path.dirname(__file__),"static")
class TestHandler(BaseHandler):
    async def get(self):
        self.finish({"msg":"hello Tornado"})
# 集成路由
urlpatterns = [(r'/',TestHandler)]
urlpatterns += (user.urlpatterns)
app = tornado.web.Application(
    handlers=urlpatterns,static_path=static_path,debug=True
)
# 將數(shù)據(jù)庫(kù)連接注入到事件循環(huán)中
app.objects = peewee_async.Manager(database)
app.redis = redis.Redis(password='123',decode_responses=True)
# 將異步redis鏈接注入到事件循環(huán)
# async def redis_pool(loop):
#
#     return await aioredis.create_redis_pool('localhost',minsize=1,
#                                             maxsize=1000,encoding='utf8',loop=loop)
#
# loop = asyncio.get_event_loop()
# app.redis = loop.run_until_complete(redis_pool(loop))
# app.objects = peewee_async.Manager(database)
if __name__ == "__main__":
    print("開(kāi)啟服務(wù)")
    tornado.options.parse_command_line()
    app.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

到此這篇關(guān)于Python web框架之tornado的使用的文章就介紹到這了,更多相關(guān)Python tornado內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python sqlite3 判斷cursor的結(jié)果是否為空的案例

    python sqlite3 判斷cursor的結(jié)果是否為空的案例

    這篇文章主要介紹了python sqlite3 判斷cursor的結(jié)果是否為空的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Python讀寫文件模式和文件對(duì)象方法實(shí)例詳解

    Python讀寫文件模式和文件對(duì)象方法實(shí)例詳解

    這篇文章主要介紹了Python讀寫文件模式和文件對(duì)象方法,結(jié)合實(shí)例形式詳細(xì)分析了Python文件操作常用技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • Python中的json庫(kù)常用方法示例詳解

    Python中的json庫(kù)常用方法示例詳解

    這篇文章主要介紹了Python的json庫(kù)常用方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Python爬蟲(chóng)天氣預(yù)報(bào)實(shí)例詳解(小白入門)

    Python爬蟲(chóng)天氣預(yù)報(bào)實(shí)例詳解(小白入門)

    這篇文章主要介紹了Python爬蟲(chóng)天氣預(yù)報(bào)實(shí)例詳解(小白入門),詳細(xì)介紹了整個(gè)爬蟲(chóng)建立的流程,最后分享了實(shí)現(xiàn)代碼,很簡(jiǎn)潔,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Python實(shí)現(xiàn)繪制M2貨幣供應(yīng)率曲線

    Python實(shí)現(xiàn)繪制M2貨幣供應(yīng)率曲線

    這篇文章主要為大家詳細(xì)介紹了如何利用Python語(yǔ)言實(shí)現(xiàn)繪制M2貨幣供應(yīng)率曲線,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-06-06
  • 淺析python標(biāo)準(zhǔn)庫(kù)中的glob

    淺析python標(biāo)準(zhǔn)庫(kù)中的glob

    glob 文件名模式匹配,不用遍歷整個(gè)目錄判斷每個(gè)文件是不是符合。這篇文章主要介紹了python標(biāo)準(zhǔn)庫(kù)中的glob的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2020-03-03
  • Python深度優(yōu)先算法生成迷宮

    Python深度優(yōu)先算法生成迷宮

    這篇文章主要為大家詳細(xì)介紹了Python深度優(yōu)先算法生成迷宮,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • ubuntu16.04升級(jí)Python3.5到Python3.7的方法步驟

    ubuntu16.04升級(jí)Python3.5到Python3.7的方法步驟

    這篇文章主要介紹了ubuntu16.04升級(jí)Python3.5到Python3.7的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 我的快遞一個(gè)月沒(méi)動(dòng)靜于是趕緊上線python快遞查詢系統(tǒng)

    我的快遞一個(gè)月沒(méi)動(dòng)靜于是趕緊上線python快遞查詢系統(tǒng)

    我的快遞在路上走了一個(gè)月還沒(méi)到,于是自己編寫快遞查詢,文中通過(guò)實(shí)例代碼截圖的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-09-09
  • Python中常見(jiàn)占位符的用法解析

    Python中常見(jiàn)占位符的用法解析

    在Python編程中,經(jīng)常需要在字符串中插入變量或占位符來(lái)構(gòu)建動(dòng)態(tài)的文本內(nèi)容,這篇文章主要為大家介紹了一些常見(jiàn)占位符的使用,需要的可以了解下
    2024-01-01

最新評(píng)論

安顺市| 商洛市| 赫章县| 鸡东县| 延吉市| 安徽省| 安岳县| 马鞍山市| 海伦市| 社会| 修水县| 冷水江市| 鄂托克旗| 丹棱县| 玛沁县| 方山县| 鱼台县| 布尔津县| 泰州市| 湘乡市| 应城市| 莲花县| 文山县| 孟津县| 泉州市| 喀什市| 遵义市| 文山县| 黔西县| 深圳市| 泰兴市| 桃源县| 稷山县| 兴山县| 建德市| 乐都县| 周口市| 陕西省| 连平县| 城市| 龙泉市|