首页 > 编程语言 >高性能 Python web 框架 Blacksheep 初见

高性能 Python web 框架 Blacksheep 初见

时间:2022-12-27 15:36:13浏览次数:61  
标签:web 框架 Cython Python Blacksheep Flask

Python web 框架性能对比

一说到 Python 大家多半最先想到的就是它代码的简洁与性能的孱弱。
在我所使用体验过的 Python web 框架中 Tornado 性能最好,Flask 次之,Django 最差;
但是从开发的速度与后期维护的成本来说,它们的排名又应该反过来。

近些年来又有很多后起之秀,比如:sanic 和 fastapi,不由得让人好奇究竟哪一个才是性能最好的那个。
我在这里帮大家找到了这样一个仓库,其作者在 Docker 的基础上对主流的 Python web 框架进行了基准测试和对比,
从结果来看获得第一名的是一个名不见经传的叫:Blacksheep 的框架。
我后来 fork 了此 repo 并更新了其中所有框架到最新版本后,测试出来的第一名依然是它。
所以我想写一篇文章记录并介绍下它。

​klen/py-frameworks-bench: Another benchmark for some python frameworks (github.com)​

高性能 Python web 框架 Blacksheep 初见_Cython

Blacksheep

项目repo: ​​Neoteroi/BlackSheep: Fast ASGI web framework for Python (github.com)​

项目文档:​​BlackSheep (neoteroi.dev)​

作者介绍此项目的文章:​​Presenting BlackSheep, one of today's fastest web frameworks for Python – Roberto Prevato – Applications architect, DevOps, graphic designer, metal head passionate of philosophy.​

据作者所说,他是受 ​​Flask​​​ and ​​ASP.NET Core​​ 启发开发了 Blacksheep,其性能好的原因主要有三点:

  1. Blacksheep 使用了 Cython 编写了部份核心逻辑,也使用了 ​​https://github.com/nodejs/http-parser​​ 这样的 Cython 库,使得框架的性能比使用纯 Python 的框架要好。
  2. Blacksheep 使用 asyncio,这就使得它可以兼容并使用建立在 uvloop 上的 uvicorn,得以享受到其加成。
  3. Blacksheep 没有跟随 ASGI 使用 Python 内置的 Dict 和 Tuple 类型,而是使用了 Cython 的 静态类型。

与之类似的是 Vibora,这个框架也使用了 Cython 以获得最佳的性能,但是该框架牺牲了代码的简洁与可读性:

#######################################################
# This is a very sensitive file.
# The whole framework performance is highly impacted by the implementations here.
# There are a lot of "bad practices" here, super calls avoided, duplicated code, early bindings everywhere.
# Tests should help us stay calm and maintain this.
# Raw ** performance ** is our ** main goal ** here.
#######################################################

而 Blacksheep 则没有,尽管使用了 Cython 会导致开者们更难给项目贡献代码,但它的代码依然干净且可读性好。并且由于其建立在 Flask 之上,熟悉 Flask 的朋友能够快速的熟悉并进行开发。

后记

Blacksheep 做为目前 Python web 框架中最快的一个,它还蕴藏许多强大的功能,比如:依赖注入、类型绑定,中间件,扩展插件等等。留待我的下篇文章再继续介绍。

这是我的微信公众号,感兴趣的朋友可以关注下,后续会发布更多关于开发的有趣干货

标签:web,框架,Cython,Python,Blacksheep,Flask
From: https://blog.51cto.com/u_15923473/5972851

相关文章

  • Web应用怎样获取Access Token?
    1.在联盟创建服务器应用参考文档:开发准备2.获取用户级AccessToken2.1 获取code参考文档:接入华为帐号获取凭证2.1.1 先按照跳转链接进行配置urlhttps://oauth-login.c......
  • 10个中文成语,10种Python初学者常见错误
    哈喽兄弟们,我总结了Python中十种新手常见的错误,每一个都可以用成语来形容,看看各位遇到过多少次了!一、画蛇添足多余的分号Python语言与大多数编程语言不相同,它的......
  • URL分解之InternetCrackUrl函数——就是python的urlparse
    URL分解之InternetCrackUrl函数 背景近期使用WININET库写的一个数据上传、下载的客户端小程序,上传数据到网站服务器和从网站服务器下载数据到本地。由于,对WININET库部......
  • Python中的列表条件求和方法
    列表条件求和方法 list_data=[[1.0,'配件','522422','铝扣板用纽扣','金色','',72.0,'PC',''],[2.0,'配件','500031','十字槽沉头自钻自攻螺钉4......
  • Python循环任务,错误打包输出
    有时候,多个任务循环在跑,但不想中间任何一个错误,停止主线程,但又想在主线程运行结束后,采集运行过程中所有的错误信息。这种刁钻的想法,我自问自答,记录一下操作方法。......
  • python mysql操作,更新数据
    importmysql.connectortest_db=mysql.connector.connect(host="localhost",user="root",passwd="123456",database="test")test_cursor=test_db.cursor()将......
  • Python知识点收集
    带下划线的变量和函数的意义变量(函数类似)-前带单下划线'_'的变量,是一个'私有变量'(语义化),只用于类内部使用,实例还是可以访问到这个变量-前带双下划线'__'的......
  • JavaWeb项目实战(3)软件快速下载
    前两篇文章里提到的所有文件均可在这里下载:​​https://www.lmonkey.com/tools/java​​......
  • web概念概述
    JavaWeb:  *使用Java语言开发基于互联网的项目软件架构  1.C/S:Client/Server客户端/服务器端    *在用户本地有一个客户端程序,在远端有一个服务端程序   ......
  • JavaWeb项目实战(1)数据库环境搭载
    学业不精,趁放假看网课学习JavaWeb,为了激励自己学习,全程记录学习过程1.安装数据库MySQL官网:​​https://www.mysql.com/​​我下载的是mysql-8.0.16-winx64版本。将文件解压......