35
回答
OSC 第 104 期高手问答 —— Python Web 开发
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

OSCHINA 本期高手问答( 12月15日- 12月21日)我们请来了豆瓣 CODE 的维护者@dongwm 来解答 Python Web 开发 方面的问题。

董伟明,@dongwm ,运维 - Devops - 产品开发(Web开发),现在是国内豆瓣用户产品部门条目组技术负责人。主要负责豆瓣电影,豆瓣读书,豆瓣音乐,豆瓣条目和豆瓣东西等产品线的技术。给众 多优秀开源项目,尤其是运维开发相关的项目贡献过代码。其中知名的包含 pip,IPython。也给 Python 标准库贡献过代码。现在还负责豆瓣 CODE 的开源维护。

高手博客:http://www.dongwm.com/

高手语录

豆瓣是国内大范围使用 Python 达到亿级别的网站。产品开发每日需要面对千万级别的应用,完成功能开发迭代,优化改进,bug 修改等工作。希望越来越多的人了解到 Python Web 开发这个职业。

OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家就 Python Web 开发 方面的问题向 @dongwm 提问,请直接回帖提问。

举报
叶秀兰
发帖于2年前 35回/7K+阅
共有35个答案 最后回答: 2年前

@dongwm :python的性能监测工具你们一般用什么。如何解决python多线程效率不高的问题。

--- 共有 3 条评论 ---
dongwm回复 @浪子一号 : 性能分析的前提是了解产品业务的逻辑. 再使用工具来定位和跟踪. 我通常都是line_profiler+pytrace(你也可以使用strace), 偶尔使用cProfile+pstats的组合. 对于生产环境定位问题, 需要你提前准备一些功能性的函数或者方法, 在觉得有问题的时候方便调用定位. 2年前 回复
浪子一号不好意思啊。写的有点极速为了争沙发。哈哈。 对的。我问的问题就是采用什么工具分析性能。例如java 有jprofile. jstack来查看线程的问题。 2年前 回复
dongwm你好. 没看懂你的问题 Python的性能检测工具. 是指分析Python程序的性能问题出在哪里的工具么,还是监控Python应用的性能状态情况的工具? 先说第二个. 多线程的性能限制是语言设计的问题. 而且和你要做的具体工作有关, 你可以尝试使用协程, 充分利用服务器的多核使用多进程 2年前 回复
@dongwm : 你个人开发web项目 一般会用到哪些开源项目
--- 共有 1 条评论 ---
dongwm这个和做的项目的类型有关. 通用的 Python的: Flask, Mako(我是Jinja2黑), Supervisor, Requests, Sqlalchemy, MongoEngine, Celery, Gunicorn, Werkzeug 前端的: React, webpack, 我最近非常看好Pyramid, 如果有新的项目我准备试用 2年前 回复
@dongwm : 你好,我一直在使用豆瓣的Android手机客户端,我在使用中的体验,不如web方式更好。是因为豆瓣在app方面的设计还不成熟,还是因为python作为web开发的主要语言,限制了豆瓣app的开发吗? 还有一个问题,python在web开发方面很强大,您目前觉得最好得python web框架哪一个比较好?为什么? 谢谢。
--- 共有 5 条评论 ---
dongwm回复 @机器猫123 : 还有一点是 建议webpy不要用做开发环境, 原作者已经离世, 社区活跃度一般, bottle社区活跃度也一般 虽然python语言的web框架百花齐放, 除了练手, 写demo 快速验证外. 但是如非特殊原因 django, flask, pyraimd三选一就好了. 2年前 回复
机器猫123回复 @dongwm : 谢谢老师的解答。受益匪浅。 2年前 回复
dongwm其实现在网站性能问题大多不是因为web框架本身,当产品真的发展到那一天, 也会有很多解决的办法, 在踩了无数的坑之后也早已经对它定制了很多. 2年前 回复
dongwm如果我个人的观点, 假如不确定这个产品未来的发展, 这个产品也不是非常大的企业级, 想跟上主流, 选择Flask; 如果这个系统设计的功能齐全, 未来也会更复杂, 而且你已经对web开发这件事了解比如深入, 还是选择Django比较好(初学者还是直接选择Flask比较好); Pyramid我没有在实际的生成环境大范围使用, 不敢妄言它设计的优点, 但是假如我最近想做个什么项目我会首选它尝试. 2年前 回复
dongwm感谢使用豆瓣的安卓客户端! 豆瓣app的Python后端支持没有问题. 哪怕明天用户量突然增加10倍也是没有问题. 没有好的web框架之后更适合的. 如果没有特别的业务上的无法满足的问题. 和技术同学的偏好, Django/Flask/Pyramid都是很好地选择. 我觉得选择的标准主要是看社区的活跃程度, 第三方插件的完善情况, 出了问题是不是可以找到问题的解决办法. 2年前 回复
@dongwm : 我们也python,go开发小团队,善用 django 和 flask,tornado 等py框架。目前有个项目要用到web im 即时聊天(websocket),和实时对讲。 目前技术选型还是希望继续python,不过这块没有相关经验,暂定目前方案 1. tornado + redis +pypy, or bottle + gevent + pypy, 2. golang(周期长点,但靠谱),不知道这块 dongwm有何好的技术建议,望请教.
--- 共有 5 条评论 ---
dongwm回复 @乌龟壳 : 对 2年前 回复
乌龟壳回复 @dongwm : 用错是不是说在tornado里面写阻塞的代码的意思? 2年前 回复
dongwm回复 @沃尔德 : tornado就是为了解决这样的问题. 基于它的非阻塞的方式和对 epoll 的运用,非常适合实时 Web 服务。但是一定要用对, 一定要用对, 一定要用对. 重要的话说三遍. 2年前 回复
ntsaipypy 还好,目前我们用在 ARM 和 平时的API SERVER 上,性能良好。尽量使用简单 库和框架,有些C库支持不太好。PYPY 需要一个热的过程性能才上得来。我相对来说比较有疑问的是 tornado + redis这种组合 对于高性能 IM 环境来说是否能满足。 2年前 回复
dongwmtornado+redis+pypy 2年前使用过pypy 确实和CPython相比性能有20-30%的提升. 但是需要实际的在生产环境里面对比. 还有 pypy对CPython的生态环境支持我略有些疑问, 我只是担心会埋一些奇怪的坑 - 还需要你们团队去实践啦. 2年前 回复
@dongwm : 你好,目前主流的python web开发是选择python2.x还是python3?用python编程对中文支持不是很好,有什么比较好的办法解决吗?
--- 共有 4 条评论 ---
gowk回复 @dongwm : 十分感谢! 2年前 回复
dongwm回复 @dongwm : Python2的设计 让人略有些疑惑 可以先看看 http://nedbatchelder.com/text/unipain.html 2年前 回复
dongwmpython对中文支持很好啊. 只是你对编码体系了解的不够, 建议继续学习 2年前 回复
dongwmPython2会支持到2020年, 而且不太可能在已经运行很长时间很稳定的项目强制迁移到Python3. 所以Python2的路还是会蛮长的。 但是假如你是一个愿意拥抱变化的人, Python3是未来. 必然要选择 不用纠结Python2/3 现在学python2 到手就算迁你也有实际的能力很快的上手python3 - 他们只是有些语言语法的不同 2年前 回复
@dongwm :python在大数据处理方面有没有好的建议?谢谢!
--- 共有 2 条评论 ---
布衣小贩回复 @dongwm : 回头研究一下,谢谢分享 2年前 回复
dongwm豆瓣的主要基础设施大多都是Python写的. 对于产品开发, 我最常用的就是Dpark: Spark的Python克隆, DPark是一个基于Mesos的集群计算框架, 类似于MapReduce,但是比其更灵活,可以用Python非常方便地进行分布式计算,并且提供了更多的功能以便更好的进行迭代式计算 2年前 回复
@dongwm :python 在写rest API接口方面有没有好的框架?谢谢
--- 共有 10 条评论 ---
布衣小贩回复 @沃尔德 : 谢谢,试试 2年前 回复
布衣小贩回复 @Hochikong : 好,谢谢 2年前 回复
布衣小贩回复 @黄金乞丐 : 谢谢,目前在用,是重了点 2年前 回复
布衣小贩回复 @dongwm : 好,谢谢! 2年前 回复
dongwm回复 @dongwm : django-tastypie 虽然我之前没有听说了, 刚才看了下, 完全不推荐,原因是社区活跃度很低, 非常多的issue和pull request没人理. 我身边的人也没有用这个的. 2年前 回复

@dongwm :你好,很多Python开源的项目和技术在实际工作中的应用取得的效果是显著的。我要提问的问题是,这些好的优秀的开源项目和这些项目的API,都是从哪里知道和提炼的。这样授人以渔,相信效果是更好的。

--- 共有 2 条评论 ---
Asktao回复 @dongwm : 谢谢! 2年前 回复
dongwm需要个人对技术有追求和兴趣, 经常上github, 关注https://github.com/trending 了解现在热的趋势, 多看各种技术的文档, 了解别人使用后的分享经验, 慢慢的就会浮现出那些东西好, 他们是用来做什么的, 应用场景是什么这样的答案了. 2年前 回复
@dongwm : 你的python 开发环境是? 
--- 共有 2 条评论 ---
dongwm不知道理解的对不对 2年前 回复
dongwm我日常还是在Python2, 个人写的项目会写兼容python2/3的代码, 偶尔写python3的应用. 我使用emacs编辑器 -> 之前用过2年的sublime和vim 后三年都是emacs 电脑是 Macbook pro 2年前 回复
@dongwm : python  在web开发方面有什么优势?如果项目用python开发,招人难可能是个大问题。
--- 共有 2 条评论 ---
dongwm 而且Pythonweb框架发展已经10多年, 国内外都有一些成功的案例, 比如豆瓣, youtube, quora. 招人难, 但是也能通过招聘过滤掉一些基础很差 学习能力不行的人, 因为在校教育没有教python. 没有动力和追求是不会愿意学习python到不错的水平的. 2年前 回复
dongwm现在创业重要的是要活下来, 快速出demo, 快速迭代. 还可能要一个多用. 而python语言正好是这样的胶水语言 在产品流程的各个领域都有不错的成绩和积累. 2年前 回复
顶部