专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

2023年是时候更新你的技术武器库了AsgivsWsgi(FastAPIvsFlask)

  也许这一篇的标题有那么一点不厚道,因为Asgi(Asynchronous Server Gateway Interface)毕竟是Wsgi(Web Server Gateway Interface)的扩展,而FastAPI毕竟也是站在Flask的肩膀上才有了突飞猛进的发展,大多数人听说Asgi也许是因为Django的最新版(3.0)早已宣布支持Asgi网络规范,这显然是一个振奋人心的消息,2023年,如果你在Web开发面试中不扯一点Asgi,显然就有点落后于形势了。
  那么到底啥是Wsgi,什么又是Asgi,放心,不扯CGI,不扯各种抽象概念,简单粗暴理解:
  Wsgi是同步通信服务规范,客户端请求一项服务,并等待服务完成,只有当它收到服务的结果时,它才会继续工作。当然了,可以定义一个超时时间,如果服务在规定的时间内没有完成,则认为调用失败,调用方继续工作。
  Wsgi简单工作原理示意图:
  简单实现: #WSGI example    def application(environ, start_response):       start_response("200 OK", [("Content-Type", "text/plain")])       return b"Hello, Wsgi "
  Asgi是异步通信服务规范。客户端发起服务呼叫,但不等待结果。调用方立即继续其工作,并不关心结果。如果调用方对结果感兴趣,有一些机制可以让其随时被回调方法返回结果。
  Asgi简单工作原理示意图:
  简单实现: #Asgi example  async def application(scope, receive, send):       event = await receive()       ...       await send({"type": "websocket.send", ...})
  简单总结一下:Asgi是异步的,Wsgi是同步的,而基于Wsgi的Flask是同步框架,基于Asgi的FastAPI是异步框架,就这么简单,那么同步框架和异步框架的区别到底在哪儿?为什么要把Flask换成FastAPI?
  不靠拍脑门儿、也不是道听途说、人云亦云。玩技术的应该用数据说话,论点永远依托论据,所以我们来简单对两款框架的性能做一个测试,首先分别安装依赖的库。
  Flask: pip install gunicorn pip install gevent pip install flask
  FastAPI: pip install fastapi pip install uvicorn
  我们首先干的一件事就是,看看Flask和FastAPI如何处理来自多个客户端的多个请求。特别是当代码存在效率问题时(比如数据库查询时间长这种耗时任务),这里故意使用time.sleep()来模拟耗时任务,为什么不用asyncio呢?因为众所周知的原因:time.sleep是阻塞的。
  Flask: from flask import Flask from flask_restful import Resource, Api from time import sleep  app = Flask(__name__) api = Api(app)  class Root(Resource):     def get(self):         print("睡10秒")         sleep(10)         print("醒了")         return {"message": "hello"}  api.add_resource(Root, "/")  if __name__ == "__main__":     app.run()
  FastApi: import uvicorn from fastapi import FastAPI from time import sleep app = FastAPI()  @app.get("/") async def root():     print("睡10秒")     sleep(10)     print("醒了")     return {"message": "hello"}  if __name__ == "__main__":     uvicorn.run(app, host="127.0.0.1", port=8000)
  分别启动服务
  Flask:python3 manage.py
  FastAPI:uvicorn manage:app --reload
  同时一时间内,开启多个浏览器,分别并发请求首页 。
  Flask:http://localhost:5000
  FastAPI:http://localhost:8000
  观察后台打印结果:
  Flask:
  FastAPI:
  可以看到,同样的四次请求,Flask先是阻塞了40秒,然后依次返回结果,FastAPI则是第一次阻塞后直接返回,这代表了在FastAPI中阻塞了一个事件队列,证明FastAPI是异步框架,而在Flask中,请求可能是在新线程中运行的。将所有CPU绑定的任务移到单独的进程中,所以在FastAPI的例子中,只是在事件循环中sleep(所以异步框架这里最好不要使用time.sleep而是asyncio.sleep)。在FastAPI中,异步运行IO绑定的任务。
  当然这不能说明太多问题,我们继续使用鼎鼎有名的ApacheBench分别对两款框架进行压测。
  一共设置5000个请求,QPS是100(请原谅我的机器比较渣)。 ab -n 5000 -c 100 http://127.0.0.1:5000/ ab -n 5000 -c 100 http://127.0.0.1:8000/
  这里为了公平起见,Flask配合Gunicorn服务器,开3个worker,FastAPI配合Uvicorn服务器,同样开3个worker。
  Flask压测结果: liuyue:mytornado liuyue$ ab -n 5000 -c 100 http://127.0.0.1:5000/ This is ApacheBench, Version 2.3 <$Revision: 1826891 gt; Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/  Benchmarking 127.0.0.1 (be patient) Completed 500 requests Completed 1000 requests Completed 1500 requests Completed 2000 requests Completed 2500 requests Completed 3000 requests Completed 3500 requests Completed 4000 requests Completed 4500 requests Completed 5000 requests Finished 5000 requests   Server Software:        gunicorn/20.0.4 Server Hostname:        127.0.0.1 Server Port:            5000  Document Path:          / Document Length:        28 bytes  Concurrency Level:      100 Time taken for tests:   4.681 seconds Complete requests:      5000 Failed requests:        0 Total transferred:      1060000 bytes HTML transferred:       140000 bytes Requests per second:    1068.04 [#/sec] (mean) Time per request:       93.629 [ms] (mean) Time per request:       0.936 [ms] (mean, across all concurrent requests) Transfer rate:          221.12 [Kbytes/sec] received
  FastAPI压测结果: liuyue:mytornado liuyue$ ab -n 5000 -c 100 http://127.0.0.1:8000/ This is ApacheBench, Version 2.3 <$Revision: 1826891 gt; Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/  Benchmarking 127.0.0.1 (be patient) Completed 500 requests Completed 1000 requests Completed 1500 requests Completed 2000 requests Completed 2500 requests Completed 3000 requests Completed 3500 requests Completed 4000 requests Completed 4500 requests Completed 5000 requests Finished 5000 requests   Server Software:        uvicorn Server Hostname:        127.0.0.1 Server Port:            8000  Document Path:          / Document Length:        19 bytes  Concurrency Level:      100 Time taken for tests:   2.060 seconds Complete requests:      5000 Failed requests:        0 Total transferred:      720000 bytes HTML transferred:       95000 bytes Requests per second:    2426.78 [#/sec] (mean) Time per request:       41.207 [ms] (mean) Time per request:       0.412 [ms] (mean, across all concurrent requests) Transfer rate:          341.27 [Kbytes/sec] received
  显而易见,5000个总请求,Flask花费4.681秒,每秒可以处理1068.04个请求,而FastAPI花费2.060秒,每秒可以处理2426.78个请求。
  结语:曾几何时,当人们谈论Python框架的性能时,总是不自觉的嗤之以鼻 ,而现在,Python异步生态正在发生着惊天动地的变化,新的框架应运而生(Sanic、FastAPI),旧的框架正在重构(Django3.0),很多库也开始支持异步(httpx、Sqlalchemy、Mortor)。软件科技发展的历史表明,一项新技术的出现和应用,常常会给这个领域带来深刻的变革,古语有云:察势者智,顺势者赢,驭势者独步天下。所以,只有拥抱未来、拥抱新技术、顺应时代才是正确的、可持续发展的道路。

王楚钦夺冠后拥抱他们俩赛后采访吐露原因夺冠之夜有新动态继澳门冠军赛后,王楚钦在新乡冠军赛再度获胜,七天之内完成三个冠军的壮举。这次他不仅在半决赛翻过马龙这座高山,更是在决赛中完美复仇张本智和。夺冠之后,王楚钦一改高冷状态,先后拥抱了两伟大的10!世界杯冠军诞生,欧洲劲旅创造历史,中国女足获安慰经过了近20天的激烈角逐,2022U17女足世界杯在不久前落下了帷幕。在最后一场决战中,西班牙女足凭借着第82分钟对手送上的乌龙大礼,以10击败了哥伦比亚女足,成功登顶。凭借着本场鹈鹕11291快船!可怕的不是赢球,而是锡安赛后的言论今日NBA常规赛,鹈鹕以11291大胜快船,此役没有太多悬念,伦纳德缺阵导致快船实力严重受损,首节鹈鹕落后7分,次节鹈鹕占据上风,第三节鹈鹕继续压着快船打,末节快船全面崩盘。数据方连续靠王楚钦挽回口碑,秦志戬能力遭质疑,培养马龙替补迫在眉睫头条创作挑战赛刘国梁该未雨绸缪培养秦志戬的接班人吗?2022年的WTT新乡世界杯已经正式落下帷幕,在最后的男单比赛中,新生代球员王楚钦迎来了和张本智和的巅峰对决,在其他球员纷纷被淘(体育)短道速滑世界杯蒙特利尔站收官张楚桐获女子1000米第五名新华社北京10月31日电(记者丁文娴李嘉)国际滑冰联合会官网消息,20222023赛季短道速滑世界杯加拿大蒙特利尔站当地时间30日决出六项冠军,张楚桐获得女子1000米第二次比赛第骑士5连胜!米切尔再砍38分,乐福8记三分,落选秀大爆发北京时间10月31日,NBA常规赛继续鏖战,骑士队主场迎战尼克斯。这算得上是一场强强对话,两队赛前战绩都是东部前五,阵容年轻冲击力强,但尼克斯缺少真正的巨星,骑士队现在则拥有米切尔快船4连败陷入困境!小卡仍未复出乔治低迷三分也成软肋堪比湖人北京时间10月31日,快船91112不敌鹈鹕,遭遇4连败。快船的小卡继续休战,乔治19中5,只得到14分3篮板3助攻,小莫里斯12分8篮板4助攻,鲍威尔18分3篮板3助攻鹈鹕的锡安活塞状元兑现天赋带队屠勇士终结5连败10月31日讯卫冕冠军勇士今日客赴底特律汽车城挑战活塞,勇士最近状态不算太好,反观活塞遭遇5连败,急需一场胜利来止住颓势。第一节双方你来我往始终没有拉开分差,活塞稍微落后第一节,活他在申花连替补席都坐不上,如今却成谢晖爱将,本轮为大连献绝杀日前,大连队在本轮中超跟武汉长江队狭路相逢,这场比赛经过90分钟的激战,最终以球队2比1获胜。大连队能拿三分的最大功臣,就是中场核心费煜。武汉长江队虽然在之前的比赛中连战连败,但是官方孙铭徽肩袖损伤医生建议休战4周保守治疗若无效可考虑手术直播吧10月31日讯浙江广厦篮球俱乐部(浙江东阳光)官方宣布,孙铭徽肩袖损伤,医生建议休战4周,保守治疗如果无效可考虑关节镜手术。伤情报告丨孙铭徽伤情报告北京时间10月30日,在2教你营养解馋的菠菜虾仁蒸蛋,一口吃下去美味十足,非常过瘾头条创作挑战赛欢迎大家,我是中原辣哥,喜欢美食的朋友,可以关注一下我们哦。吃在我们中国发扬的是如此广大,各种各样的美食数不胜数,让人眼花缭乱,难以挑选。在秋天这个天气比较干燥的时节
海信电视E8K拿下业界双首发,颠覆100英寸巨屏行业格局近几年,随着电视屏幕的不断增大,人们对巨屏的认知也在不断变化,从早先75英寸算巨屏,到如今100英寸巨屏接踵而来,消费者的可选余地更大了。3月23日,海信在放大生活的美好发布会上正全球首创行业第一OPPOEncoFree3强势升级现在越来越多的手机取缔了3。5mm耳机孔,TWS耳机如今已成为了不少耳机使用者的选择。不少的手机厂商都在不断的推出TWS耳机,OPPO也推出了新品OPPOEncoFree3,因为之熊孩子不止是熊那么简单这两天,一段让人看了发怵的视频在网上刷屏7岁小女孩和4岁小男孩一起玩耍,当他俩接近水井时,小女孩突然抱起小男孩扔进了井里。开始,男孩用手使劲扒着井壁,并未落下。女孩见状,活生生地掰还没有抓完,中超门将透露打假球细节,足协内部还有18个管理部门还没有抓完,中超门将透露打假球细节,中国足协反腐之路任重而道远,一定要坚定不移。从李铁第一个落马之后,中国足协也是不断地有高官,各部门的管理相继漏网。目前为止,包括足协主席一把手陈24岁女兵,蜷缩皮匠门口,皮匠一把将她抱进屋,不久孩子呱呱落地1937年,小皮匠刚要出门放羊,打开院门却见一女兵,昏死在自家门口。小皮匠探头探脑,确定左右无人,这才奓着胆子,飞奔到女兵跟前,一把将人抱进屋,搁到土炕上。随后,他锁紧大门,将羊赶海棠正在最佳观赏期,南京莫愁湖花朝游园会等你来穿越扬子晚报网3月25日讯(记者徐昇)3月25日,南京莫愁湖景区花朝游园会正式开启。本周末,在楹联长廊赏荷榭等区域,各类国风文化沉浸式演出轮番上演,汉服巡游活动更显古风韵味,不少市民游都是骁龙7Gen2,红米Note12Turbo和真我GTNeo5SE,谁更香一些?骁龙7Gen2经过这些天的宣传,大家对它应该都比较清楚了,这个芯片简单来说就是骁龙8芯片进一步降频的产物,不像之前的骁龙7系列那样,被狠狠砍上几刀,因此性能表现相当不错,安兔兔成绩小米12S努比亚Z50IQOO11,选谁?小米12S搭载骁龙8Gen1处理器功耗与性能控制的都不错,重182g屏幕采用6。28英寸居中挖孔微曲设计支持120Hz刷新率LPDDR5UFS3。1存储规格,支持类DC调光和屏幕指张家界市自然资源和规划局赴长沙开展土地项目精准招商红网时刻张家界3月25日讯(通讯员陈文玉)3月23至24日,张家界市自然资源和规划局主要负责人带队赴长沙举行2023年度土地营销推介会,向各投资意向企业现场赠送土地供应定制方案,张零编程基础,利用GPT4实现自然语言编程零编程经验,通过GPT4十分钟开发了一个浏览器插件,并成功运行,实现了需求目标!太不可思议了,真正体会到了自然语言编程的魅力!下一步是利用Pinterest的API接口实现自动发图MacM1芯片系统基于大语言模型LLaMA部署本地版的ChatGPTOpenAI公司基于GPT模型的ChatGPT风光无两,眼看它起朱楼,眼看它宴宾客,FaceBook终于坐不住了,发布了同样基于LLM的人工智能大语言模型LLaMA,号称包含70亿
友情链接:快好知快生活快百科快传网中准网文好找聚热点快软件