基于 tornado 的 thrift server 和 client

2015-11-20 22:01:11 +08:00
 sujin190
标准 thrift python 库里 tornado 的 server 使用的协议和标准协议不一样,没办法和其他语言互通,所以就造个轮子吧~

https://github.com/snower/TorThrift

使用 greenlet 加速 thrift 协议解析过程,使用标准 thrift 协议通信
4138 次点击
所在节点    Python
10 条回复
lianghui
2015-11-21 13:05:28 +08:00
使用 greenlet 加速 thrift 协议解析过程 cpu 计算也能加速 ,请 lz 证明下?
sujin190
2015-11-21 15:42:39 +08:00
@lianghui 我的原意只是说,在 tornado 读数据的过程中,如果不用 greenlet ,那么在协议解析过程中 readint 之类的就只能 callback 了,这比直接 return 要慢好几倍的
zenliver
2015-12-04 13:38:02 +08:00
greenlet 和 tornado 一起用,,,目测只会降低功能
sujin190
2015-12-04 14:17:11 +08:00
@zenliver 什么?
zenliver
2015-12-04 14:41:00 +08:00
@sujin190 greenlet 是用来上下文切换的, 比如 gevent, tornado 里用这货不适合
zenliver
2015-12-04 14:42:36 +08:00
motor 似乎用的这个, 没研究过它的实现, 不过 tornado Iostream 对于 packet 的解析性能真的不敢恭维
sujin190
2015-12-04 20:19:41 +08:00
@zenliver greenlet 也是用来干这个的,但可以减少大量的回掉,测试用 tornado callback 解包的话比原生 thrift 满 4 倍到 5 倍,用 greenlet 切换上下文解包的话慢 1 倍不到,毕竟异步 io ,二进制解包没什么好的解决方案
sujin190
2015-12-04 20:22:47 +08:00
@zenliver 其实也是参照 motor ,最初实现了 https://github.com/snower/TorMySQL ,后来又对 thrift 改了一下, thrift 标准 python 库里有 tornado server ,但其在整个协议头又加了个包头,先发送整个数据长度,这样 tornado 收到解包会快一些,但没办法和其他语言互通,也是坑
jsongo
2016-08-31 23:58:34 +08:00
好久的贴。不能和其他语言互通的问题,今天也遇到了,不过找到了解决方法,共享下。 https://issues.apache.org/jira/browse/THRIFT-2335 这里有提到,用 TFramedTransport 就可以了。
sujin190
2016-09-01 12:53:54 +08:00
@jsongo 确实是,不过可能有时候很难指定用什么吧,不过经过很多次需改之后,现在的版本完全可以使用任意传输协议,性能也只比线程版本低百分之 30 左右,已经很快了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/237734

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX