如何选择异步Web Python框架基础知识_Python入门教程

Python在3.4引入了 asyncio 库,3.6新增了关键字 async 和 await ,此后,异步框架迅速发展了起来,性能上能和Node.js比肩,除非是CPU密集型任务,否则没有理由不适用异步框架。如果你是Web开发者,现在异步Web框架上有了更多选择!1、TornadoTornado 根本不是什么新框架,它最初是由FriendFeed(后被Fa

如何选择异步Web Python框架基础知识

Python在3.4引入了 asyncio 库,3.6新增了关键字 async 和 await ,此后,异步框架迅速发展了起来,性能上能和Node.js比肩,除非是CPU密集型任务,否则没有理由不适用异步框架。

如何选择异步Web Python框架基础知识_Python入门教程

如果你是Web开发者,现在异步Web框架上有了更多选择!

1、Tornado

Tornado 根本不是什么新框架,它最初是由FriendFeed(后被Facebook收购)在2009年发布。从一开始就提供有异步编程的功能。

Tornado 不仅仅是Web框架,同时它内置了很多异步模块,可用于自己构建异步应用。这些模块包括:

  • 协同程序和其他原语(tornado.gen,tornado.locks,tornado.queues等)
  • 网络模块(tornado.ioloop,tornado.iostream等)
  • 异步服务器和客户端(tornado.httpserver,tornado.httpclient,等)

通过这些模块,Tornado 构建了自己的异步Web框架模块。

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

Tornado在Python社区中拥有很多追随者,并且经验丰富的架构师使用它们来构建功能强大的系统。这个框架长期以来一直在解决并发问题,但是由于它不支持WSGI标准(大部分Python库仍在同步中),因此尚未成为主流。

国内据说知乎是基于Torando构建的。

2、 Snaic

Sanic是一个诞生有3年的框架:它只支持3.6以上Python版本,支持通用的async / await语法,开箱即用,因此你无需阅读大量文档就可以写出你的一个HTTP 处理器。

除了 async 关键字之外,语法上和 flask 基于没差别。

from sanic import Sanic
from sanic.response import json

app = Sanic()

@app.route("/")
async def test(request):
    return json({"hello": "world"})

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)

Sanic可以说是Python世界中最流行和最受欢迎的异步框架。它具有你项目中需要的所有功能:路由,中间件,Cookie,版本控制,蓝图,基于类的视图,静态文件,流,sockets,此外你还可以集成模板,数据库驱动,文件I / O,队列等等。

3、Vibora

Vibora和Sanic非常像,致力于成为最快的Python Web服务器。

Vibora声称比其它框架快几倍,比竞争对手Sanic还快两倍多。当然,这个基准测试要持怀疑态度。

尽管在语法和功能上,Vibora可以与Sanic媲美但我认为Sanic更加成熟,因为它已经存在了很长一段时间并且具有更大的社区。

from vibora import Vibora, JsonResponse

app = Vibora()

@app.route('/')
async def home():
    return JsonResponse({'hello': 'world'})

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=8000)

4、Quart

如果您喜欢Flask,但又要支持异步, 那么Quart你一定会喜欢

Quart符合ASGI标准,该标准是WSGI标准的后继产品,并提供异步支持。Quart不仅与Flask相似,而且与Flask API兼容!该框架的作者希望保留了Flask的风格,只是向其中添加异步、WebSocket和HTTP 2支持。因此,你可以从Flask文档中学习Quart的用法,只需要记住Quart中的函数是异步的就行。

from quart import Quart

app = Quart(__name__)

@app.route('/')
async def hello():
    return 'hello'

app.run()

几乎完全像Flask

由于Quart是从Flask中演进过来的,因此Flask的所有功能均可用:路由,中间件,会话,模板,蓝图等。实际上,你甚至可以直接在Quart内部使用Flask的扩展插件。不过,有一个问题是它仅支持Python 3.7+。

5、FastAPI

FastAPI似乎是异步 Python 框架里功能、文档最丰富的框架。

该框架的作者深入研究了其他几个框架,从诸如Django到Sanic之类的现代框架,以及NestJS(Node.js,Typescript Web框架)。

语法甚至可以说它比我们遇到的其他框架更有趣:

rom fastapi import FastAPI

app = FastAPI()

@app.get("/users/me")
async def read_user_me():
    return {"user_id": "the current user"}

@app.get("/users/{user_id}")
async def read_user(user_id: str):
    return {"user_id": user_id}

FastAPI胜过其他框架的杀手锏列表:

  • 自动生成API文档:编写API接口后,你就可以使用符合标准的UI如SwaggerUI,ReDoc等来使用API​​。

那性能呢?FastAPI是基于Starlette库构建的,其性能可与Node相匹配,在某些情况下甚至可以与Go相匹配。总而言之,我真的有一种感觉,FastAPI将成为Python的顶级异步框架。

总结

如今,Python异步生态正在发生很多事情。出现了新的框架,旧的框架正在重写,很多库开始支持异步行为。对于Web框架,Python已准备就绪,可提供出色的性能。如果很长一段时间你在考虑迁移到Node或者go,那现在不需要了。

原文参考连接:https://geekflare.com/python-asynchronous-web-frameworks/

海计划公众号
(0)
上一篇 2020/03/22 01:27
下一篇 2020/03/22 01:27

您可能感兴趣的内容

  • 学好Web前端开发,必要了解的HTML零基础入门CSS的技巧有哪些?基础入门_技巧

    HTML+CSS的技巧有哪些?怎么学好Web前端开发?经过Web前端学习的一个过程,每个人都会对前端的认识逐渐由浅入深,由一开始僵硬地使用标签和标签属性进行简单网页布局,到最后能够对网页进行丰富的CSS渲染,逐渐不断成长起来。接下来给大家分享一下阶段学习技巧。1、合理清晰的HTML文档结构有着重要的意义首先,这有利于自己写CSS时选择标签;其次,这方便别人阅

    2020/03/29
  • javascript解释器是什么?使用指南_解释器小白知识

    JavaScript是一门脚本语言,是需要被别人解释执行的,这个别人就是JavaScript解释器。它读取一条JS语句、翻译、执行,然后再读取下一条JS语句,周而复始。JavaScript解释器是用来干嘛的呢?目的就是执行JavaScript源代码JS解释器包含了词法解析器,句法解析器,字节码生成器,字节码解释器。词法解析器它可以让一行行代码源码拆分成一个个

    2020/03/20
  • 如何提升网站访问速度?小白知识_优化入门百科

    但网站打开速度变的不可科学的时候,怎么检测打开速度是多少?IIS7网站监控检测网站是否被劫持、域名是否被墙、DNS污染检测、网站打开速度检测等信息。如何提升网站打开速度?如果你是网站使用者,你可以通过升级宽带、光纤、升级CPU内存、优化操作系统等操作来加快网页的打开速度。如果你是网站建设者,可以通过以下几种方法来提升用户的访问速度:1. 进行代码优化。删除冗

    2020/03/24
  • https http 混合访问零基础入门https 页面中引入 http 资源的解决方式_资源零基础入门

    解决android 5.0 webview不能加载http与https混合内容的问题在使用WebView加载https资源文件时,如果认证证书不被Android认可,那么会出现无法成功加载对应资源问题。那么,我们就要针对这一状况作出对应的处理。1、解决方法:启用mixed content ,webview默认不允许加载http与https混合内容:比如你访

    2020/04/05
  • Discuz入门知识一套通用的社区论坛软件系统

    Discuz入门指南 官方网址:http://www.discuz.net 简介描述:一套通用的社区论坛软件系统

    2020/03/06
  • prism.js入门百科_一款轻量的,可扩展的语法高亮处理器

    prism.js入门百科 官方网址:https://prismjs.com/ GitHub:https://github.com/PrismJS/prism 简介描述:一款轻量的,…

    2020/03/06
  • Cookie、Session与Token小白知识_存储小白攻略

    CookieCookie是一个http请求首部,当服务端响应头上标记着setCookie时,可以设置此cookie到当前域名下。浏览器端会将此cookie以kv的形式存储到本地文件中Sessionsession实际上是一种概念,表示每次会话服务器存储的用户信息实现:常见的手段是使用cookie来实现session。以java为例,客户端首次请求服务端后(例如

    2020/03/30
  • fakeLoader.js小白指南_十分炫酷的jQuery页面预加载Loading特效插件

    fakeLoader.js小白指南 官方网址:http://joaopereirawd.github.io/fakeLoader.js/ GitHub:https://github…

    2020/03/11
  • 微信小程序前端样式WXSS书写指南教程_wxss攻略教程

    一. WXSS的简单介绍WXSS(WeiXin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式。与 CSS 相比,WXSS 扩展的特性有:尺寸单位样式导入二. 尺寸单位rpx(responsive pixel): 可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px,共有750个物理像

    2020/03/24
  • 原生js获取浏览器获X轴,Y轴的滚动距离使用攻略_滚动入门百科

    在前端开发中,需要获取浏览器滚动距离的需求,这篇文章主要讲解如何使用原生Js兼容实现获取浏览器获X轴,Y轴的滚动距离。并延伸扩展下我们一些不知道的js知识,希望对你有所帮助。代码实现://获取浏览器X轴,Y轴的滚动距离
    function getScrollDistance() {var obj=nullif (window.pageXOffset !==

    2020/04/03
  • 前端开发工程师必须关注的几个性能指标基础教程_性能入门知识

    于页面相应时间,有一条著名的“2-5-8原则”。当用户访问一个页面:在2秒内得到响应时,会感觉系统响应很快;在2-5秒之间得到响应时,会感觉系统的响应速度还可以;在5-8秒以内得到响应时,会感觉系统的响应速度很慢,但可以接受;而超过8秒后仍然无法得到响应时,用户会感觉系统糟透了,进而选择离开这个站点,或者发起第二次请求。对于一个网站如果希望抓住用户,网站的速

    2020/03/30
  • TogetherJS基础指南网站实时协作JavaScript库_库小白入门

    快速开始通过在页面上包含两件事来快速入门。首先是JavaScript:// TogetherJS configuration would go here, but we’ll talk about that// later

    <script src="https://togetherjs.com/togetherjs-min

    2020/03/24
  • 兔展基础知识_H5页面制作,微场景制作,短视频制作

    兔展基础知识 官方网址:https://www.rabbitpre.com/ 简介描述:H5页面制作,微场景制作,短视频制作 兔展(rabbitpre)专注H5技术实现,是微信H5…

    2020/03/06
  • 浏览器禁用了javascript,各种浏览器如何开启javascript的方法总汇小白知识_浏览器小白基础

    如果你的浏览器禁用了js脚本,会出现网页无法正常显示,被禁用通常可能是某些软件或者病毒通过设置的原因。一般浏览器被禁用了javascript,打开页面时会提示:“您的浏览器禁用了JS脚本运行,请启用该功能”,那么怎么解除浏览器禁用js?这篇文章将总结整理各个浏览器如何开启、禁用javascript的方法总汇。IE浏览器开启JavaScript方法:在IE界面

    2020/04/06
  • 10道css综合面试问题菜鸟教程下载_面试小白基础

    1.css sprite是什么,有什么优缺点将多个小图片拼接到一个图片中。通过 background-position 和元素尺寸调节需要显示的背景图案。减少 HTTP 请求数,极大地提高页面加载速度增加图片信息重复度,提高压缩比,减少图片大小2 display: none; 与 visibility: hidden; 的区别联系:它们都能让元素不可用dis

    2020/03/23
  • web认证机制菜鸟知识_机制基础知识

    引言以前对认证这方面的认识一直不太深刻,不清楚为什么需要token这种认证,为什么不简单使用session存储用户登录信息等。最近读了几篇大牛的博客才对认证机制方面有了进一步了解。Basic Auth这种认证直接顺应HTTP协议的无状态性,每次执行业务的时候,都暴力地附带username与password参数,并将其发送给服务器进行验证。尽管在服务器端可以优

    2020/03/31