知乎为啥使用Tornado?使用Python中的多线程特性了吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了知乎为啥使用Tornado?使用Python中的多线程特性了吗相关的知识,希望对你有一定的参考价值。
使用 Tornado 估计是权衡了它的优点。性能好,无阻塞,尤其是在大并发量的情况下,也比较稳定。那一般选用它也是多用在 IO 密集型(等待资源较多)里面。使用 Tornado 一般是不使用多线程的,因为没有必要。
多线程多用于 IO 密集型的操作里面,但多线程会消耗较多的资源,像知呼这种网站,同时需要保持很多的长连接,而且连接的开关很频繁,最高效的模型是非阻塞、异步IO模型,而I/O复用是 Tornado 的特性,所以也没有去使用多线程增加复杂性了,这应该也是 知乎为什么使用Tornado 了。
对了,要部署了 linux 下,才能真正发挥它的威力。 windows 没有 epoll, 只有 select 。 参考技术A 因为tornado快啊,它采用了非阻塞机制,支持epoll,比ajango等其他py框架快了很多,现在用tornado的也越来越多。
至于用没用多线程,那看他们内部开发人员决定了,应该是用了,现在大点儿的服务一般都是多线程吧。
~如果你认可我的回答,请及时点击【采纳为满意回答】按钮
~~手机提问的朋友在客户端右上角评价点【满意】即可。
~你的采纳是我前进的动力
~~O(∩_∩)O,记得好评和采纳,互相帮助,谢谢。本回答被提问者和网友采纳
网上收集的“知乎网”技术方案架构
知乎的整个网站架构图如下:
知乎是国内很少的使用Python开发的一个网站,也很多值得我们学习的地方,从知乎让我们也可以了解到一些新的WEB技术。
一、Python框架
知乎目前使用的是Tornado 框架。Tornado 全称Tornado Web Server,是一个用Python 语言写成的Web 服务器兼Web 应用框架,由 FriendFeed 公司在自己的网站FriendFeed 中使用,被facebook 收购以后框架以开源软件形式开放给大众。
参考链接:http://zh.wikipedia.org/wiki/Tornado
学习文档:http://www.tornadoweb.cn/documentation
二、数据库
目前知乎采用的是MySQL作为主要的存储,使用SqlAlchemy 为ORM进行数据库的建模或者映射。
三、缓存技术
知乎使用Redis来进行缓存、队列、计数或者任务,使用Redis-Py为其连接客户端。
Redis参考链接:http://redis.readthedocs.org/en/latest/index.html
Redis-Py参考链接:http://redis-py.readthedocs.org/en/latest/index.html
四、Javascript框架
知乎使用Google的Closure Library作为前端的JavaScript 框架。
五、负载处理
目前知乎使用的是nginx做反向代理,用nginx来做静态文件等大数据量的I/O操作。
六、图片服务
知乎以前用到的Upyun,现在已经迁移到知乎自己建的图片服务上。
七、邮件服务
知乎的邮件发送一开始使用的是Amazon的SES,由于SES有些功能不能满足需求,目前已经转换成Mailgun
八、消息系统
知乎消息系统采用的是comet实现,comet是基于http长连接的“服务器推”技术。
九、虚拟环境
作为一个Python网站,知乎很有可能采用Virtualenv来解决纯净的包环境问题。
中文文档地址:http://virtualenv-chinese-docs.readthedocs.org/en/latest/index.html
十、代码部署
常见的Python项目基本上采用Fabric进行部署,不知道知乎到底用的是哪一个。
十一、搜索实现
知乎使用mmseg做中文分词,对应的词根存在redis中作为key,数据库id作为value,每个数据项是一个zset集合。查询时根据key找到对应的value。
以上是关于知乎为啥使用Tornado?使用Python中的多线程特性了吗的主要内容,如果未能解决你的问题,请参考以下文章
python 使用Tornado工具的Restpart的多部分文件上载感知自定义JSON序列化器