原标题:(2017)你最不建议使用的Python Web框架?

前言

这是一篇发在知乎专栏的文章,内容是之前我提的「(2017)你最不建议使用的Python Web框架?」下的回答。不过有些话没有说完,比如不建议tornado,却没有说对asyncio的看法,由于它的热度过去了我又懒就没有补充,今天就发在公众号下吧。

在知乎可以看到的很多Web框架推荐,有很多内容已经过时,有些直接是从网上搜的,自己根本没有真的用过,不知道推荐的时候他们的良心会不会痛,不过幸好有我来树立正确的价值观了。

第一不推荐 web.py

我以前说过,评价XX是否可以用在生产环境的一部分标准是:

代码质量。web.py的创始人Aaron Swartz自杀(官方说法)后,新的维护者能力实在是...

社区活跃程度和解决issue的能力。自己去github上去看未解决的issue和未合并的pull request数量

项目迭代情况。webpy-0.37 on Jun 26, 2012,webpy-0.38 on Jul 8, 2016。到现在一年就这样过去了然鹅什么都还没有发生。第二不推荐 bottle

bottle其实是第一个使用装饰器作为路由的框架,不过它也存在社区活跃程度和解决issue的能力的问题,其实这说明了一个问题,它更像是某个(些)人的玩具,并不关心用户反馈。不知道大家是否知道它和Flask的故事(简单的说Flask 的作者Armin Ronacher开发了Werkzeug推荐给Bottle作者,但是Bottle作者非常执着于“单文件”和“无依赖”,拒绝了使用 Werkzeug,Armin Ronacher就自己写了Flask),如果3-4年前你选择bottle我也是没意见的,现在来看Flask完爆它,哪怕是自己写的demo,你说你用了一个不适合在生产环境中使用框架的意义在哪里?完全没有积累啊。不过客观的说读源码学习写框架倒是可以的

第三不推荐 tornado

别说知乎也在用,用得好不好,用的有多苦他们自己知道 ✧(≖ ◡ ≖✿)。这个就跟豆瓣用Quixote一样,用下来需要造很多轮子,需要很多积累,并不是别人一朝一夕就能用的成熟的。

非常知名的 Python Guide 列了4个框架,除了Django和Flask,还列出了我刚推荐的 Pyramid,以及tornado。bottle、web.py什么的人家一概都不提。而且,我要说重点了,在介绍tornado的时候,Kenneth Reitz着重的加了这样的观点:

I do not recommend using Tornado unless you think you need it.

为啥这样说啊?

使用一个框架不只是框架自己,还要习惯它的编程方式。并不是用了tornado你的应用就是异步非阻塞的,性能就能刷刷涨,各种设施都要支持。我见过不少人写的tornado代码还是阻塞的,比如我前公司的某项目... (๑✦ˑ̫✦)。

使用框架还需要考虑它的社区和第三方的扩展环境。tornado的生态环境和Django/Flask根本就不是一个量级,质量也很差,指不上

tornado虽然确实可以当做web框架用,但是它优秀的地方在于它是一个异步的网络库,优势在扩展上w级别长连接上(相信一开始知乎就是考虑这点来做提醒)。这点要分清楚了。

前2天还好,但是第三条顿时引起了争议,我知道说话肯定没有Kenneth Reitz好使,所以引用他的话。其实犹之乎的同学来发表了意见,我还无意中发现,知乎产品总监来点了赞哦。嘻嘻,其实你真的写过复杂的tornado的项目就知道了,我不推荐的原因正面的讲:

tornado对于刚起步的公司或者新学Web框架的同学来说不合适。一处阻塞,全局阻塞,这对开发者的要求是很高的,我在14年的时候就想过做一个质量保证的工具,但是思考了一下,AST模块对于业务逻辑是束手无策的,你看到现在也没有看到这样的东西。

tornado是Python 2的产物,现在有了更好的解决方案asyncio。

那我们继续这个第二条:

我也是推荐至少学一个异步框架的,过去能看到的有Gevent,Twisted,一个是Hack的,另外一个现在已经被打入了冷宫,到今天当然是不推荐的。那么最好的就是官方的asyncio。

sanic/aiohttp这种框架的前景是好的,只不过现在我还没有看见某大型产品使用它们的实践经验,asyncio生态也还并不完善,暂不推荐进生产环境。

最后,你真的有需求要实现长连接,上asyncio,对于一个从无到有的过程,tornado和它并没有什么优势。

另外欢迎参与 的投票!

责任编辑:

python写web难受-(2017)你最不建议使用的Python Web框架?相关推荐

  1. 属于web框架的python库_(2017)我不建议使用的Python Web框架

    昨天我提了一个问题 (2017)你最不建议使用的Python Web框架? 下面是在原问题下的回答,看过的同学可以点赞关闭了. --- 分割线 --- 在知乎可以看到的很多Web框架推荐,有很多内容已 ...

  2. pythonweb好难-(2017)我不建议使用的Python Web框架

    昨天我提了一个问题(2017)你最不建议使用的Python Web框架?下面是在原问题下的回答,看过的同学可以点赞关闭了. --- 分割线 --- 在知乎可以看到的很多Web框架推荐,有很多内容已经过 ...

  3. python写登录界面跳转至数据库操作_pycharm+jdango+python实现创建web工程并实现简单登陆...

    本文通过pycharm和流行的python web开发框架jdango以及python3.6实现创建web工程并且实现简单登陆的功能. Pycharm下载不再细说,python下载也不再说,jdang ...

  4. python写一个系统-熬了一晚上,小白用Python写了一个股票提醒系统

    码农小马七夕节去相亲了,见了一个不错的姑娘,长的非常甜美!聊着聊着很投缘!通过介绍人了解到,对方也很满意--想着自己单身多年的生活就要结束啦,心里满是欢喜,美美哒!但是突然想起年初还有几万块在股市里面 ...

  5. 吃鸡是python写的吗_吃鸡手游竟然是Python写的?

    软妹子也要学Python 听起来这么高大上的Python是不是很难学?并没有. 北邮在2010年就出版过一本<和孩子一起学Python>,Python真的是容易入门到可以作为亲子娱乐项目的 ...

  6. python写出的程序如何给别人使用-如何用PYTHON代码写出音乐

    什么是MIDI 博主本人虽然五音不全,而且唱歌还很难听,但是还是非常喜欢听歌的.我一直在做这样的尝试,就是通过人工智能算法实现机器自动的作词和编曲(在这里预告下,通过深度学习写歌词已经实现了,之后会分 ...

  7. Python写出一个字节,一个YouTube,我用Python怎么了!

    Python 近两年一直霸占编程语言排行榜 TOP10,受欢迎程度有目共睹.其实在企业招聘层面也可以从侧面看出,大中小企业甚至国营企业已经陆续开始使用 Python 开发. 国内用 Python 最广 ...

  8. 用python写一个彩票过滤器_python入门教程NO.6 用python做个简单的彩票号码统计分析工具...

    python入门教程 python入门教程NO.6 用python做个简单的彩票号码统计分析工具 本文涉及的python基础语法是:字典.集合及for循环 字典的定义 字典也是一种可变的容器,它可以存 ...

  9. 吃鸡是python写的吗_吃鸡游戏也是用Python写的?学了Python,120个月年终奖向你招手~...

    原标题:吃鸡游戏也是用Python写的?学了Python,120个月年终奖向你招手~ 吃鸡游戏火爆全球,已经把腾讯的<王者荣耀>都比下去了,有传言,腾讯给"王者荣耀"开 ...

  10. python写迷你小游戏下载_狼人杀?用Python自己写个迷你版狼人杀游戏,自己的游戏自己做主...

    狼人杀估计很多小伙伴都玩过,是一个非常有趣的游戏!以前公司团建的时候,经常一堆人围一桌玩,心理素质比较高的同学会玩的比较好,有的时候一玩会从下午玩到晚上,真的非常怀念那段时光,今天我们用Python写 ...

最新文章

  1. vs 2005 與vs 2003 語法比較
  2. docker 删除所有容器和镜像的命令
  3. 这个搞定系统监控的妙招,不来学可惜了
  4. python tensorflow 智能家居_TensorFlow平台下的视频目标跟踪深度学习模型设计
  5. 6个步骤卸载wine
  6. python读取xlsx文件年月日变成数字_python转化excel数字日期为标准日期操作
  7. SynchronousQueueE简介
  8. 支付业务与技术架构学习总结(4)——对账相关业务知识及对账系统总结
  9. ORM框架之Mybatis(四)MyBatis生成器,逆向工程生成实体类和SQL
  10. Android深度探索--HAL与驱动开发----第三章读书笔记
  11. OSX 鼠标和键盘事件
  12. 2022美国大学生数学建模竞赛(美赛)思路代码
  13. can通信中如何设置屏蔽验收码的总结
  14. 安卓屏幕朗读app_android录屏app推荐?安卓手机屏幕录制方法步骤教程
  15. (转)什么是BD,怎么做一个好BD
  16. pip install paddlepaddle 报错 command ‘/usr/bin/gcc‘ failed with exit code 1 或 command ‘gcc‘ 报错
  17. python之有关关键字参数,默认参数,不定长参数,位置参数的定义,区别,以及使用方法。
  18. 百旺信息服务器端口,各省百旺参数设置服务器地址
  19. Eigen::常用操作[转]
  20. ChatGPT玩法大全火了,一键复制就能get同款效果:脱口秀张口就来,还能扮演哈利波特...

热门文章

  1. IR2104s半桥驱动使用经验
  2. JS输入框统计文字数量
  3. 求职必备:如何用产品思维写简历
  4. MyBatis 通用Mapper 入门教程
  5. FMS3系列学习网上教程
  6. 怎样知道一个数是不是2的N次方,怎样判断一个数是奇数还是偶数
  7. +1.1向量 链表 数组
  8. 基于AFNetworking的多张图片上传
  9. Delphi控件之---UpDown以及其与TEdit的配合使用(比如限制TEdit只能输入数字,还有Object Inspector之组件属性的介绍)...
  10. hdu 3786 寻找直系亲属