为了账号安全,请及时绑定邮箱和手机立即绑定

知乎为什么使用Tornado?使用Python中的多线程特性了吗

知乎为什么使用Tornado?使用Python中的多线程特性了吗

Smart猫小萌 2018-10-10 11:53:13
查看完整描述

2 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

自从使用tornado以后就不再使用django了, tornado也从1.x到了现在3.x

Tornado之所以与众不同, 是因为它是众多WSGI框架中的一个特例. 它的异步方式也给了社区很多启发, 影响力很大.

单就非阻塞和多线程, 起到的都是"多任务"那种功能. 不同的是, 多线程把处理器时间按照任务平分, 非阻塞是按照事件来驱动多任务, 不会在一个任务没有执行完的时候打断(没有保存变量, 任务切换这种事情, 当然也不需要加锁)

至于哪个对web开发更重要? 写出来的程序功能是一样的. 如果是异步写, 代码会多一点, 因为有很多callback, 但是你完全无需处理多线程程序的共享资源问题, 无需数据库连接池.

你需要小心不要写出CPU占用太高的代码, 因为CPU不是按照时间平均分配给大家的, 如果你的程序处理一件事情需要两秒钟, 那么两个线程的程序可能会同时跑, 总共5秒同时结束(1秒钟用在任务切换).

如果是异步环境, 那么就是先执行一个程序2秒, 然后再执行另外一个程序2秒, 总共4.5秒(无需保存环境, 假设任务切换0.5秒)

对于那种CPU消耗极小的等待任务, 比如同步的curl操作(服务器在等待另外一个服务器), 这等待的1秒钟, 使用异步的话tornado已经可以处理几千个其他的http requests, 奇妙的是tornado这个时候还是工作在单线程模式, CPU几乎完全没有浪费.

实战中, 其他框架需要在多进程prefork模式下开到60-100个进程的吞吐能力, tornado可能开1到3个进程, 处理能力是类似的. 注意在多进程模式下, cpu需要不断切换60个进程的压力是不小的.
查看完整回答
反对 回复 2018-10-24
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

好像是异步特性,Tornado轻量,性能不错
查看完整回答
反对 回复 2018-10-24
  • 2 回答
  • 0 关注
  • 1202 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信