V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
sujin190
V2EX  ›  Python

基于 tornado 的 thrift server 和 client

  •  
  •   sujin190 ·
    snower · 2015 年 11 月 20 日 · 4765 次点击
    这是一个创建于 3713 天前的主题,其中的信息可能已经有所发展或是发生改变。
    标准 thrift python 库里 tornado 的 server 使用的协议和标准协议不一样,没办法和其他语言互通,所以就造个轮子吧~

    https://github.com/snower/TorThrift

    使用 greenlet 加速 thrift 协议解析过程,使用标准 thrift 协议通信
    10 条回复    2016-09-01 12:53:54 +08:00
    lianghui
        1
    lianghui  
       2015 年 11 月 21 日
    使用 greenlet 加速 thrift 协议解析过程 cpu 计算也能加速 ,请 lz 证明下?
    sujin190
        2
    sujin190  
    OP
       2015 年 11 月 21 日
    @lianghui 我的原意只是说,在 tornado 读数据的过程中,如果不用 greenlet ,那么在协议解析过程中 readint 之类的就只能 callback 了,这比直接 return 要慢好几倍的
    zenliver
        3
    zenliver  
       2015 年 12 月 4 日
    greenlet 和 tornado 一起用,,,目测只会降低功能
    sujin190
        4
    sujin190  
    OP
       2015 年 12 月 4 日
    @zenliver 什么?
    zenliver
        5
    zenliver  
       2015 年 12 月 4 日
    @sujin190 greenlet 是用来上下文切换的, 比如 gevent, tornado 里用这货不适合
    zenliver
        6
    zenliver  
       2015 年 12 月 4 日
    motor 似乎用的这个, 没研究过它的实现, 不过 tornado Iostream 对于 packet 的解析性能真的不敢恭维
    sujin190
        7
    sujin190  
    OP
       2015 年 12 月 4 日
    @zenliver greenlet 也是用来干这个的,但可以减少大量的回掉,测试用 tornado callback 解包的话比原生 thrift 满 4 倍到 5 倍,用 greenlet 切换上下文解包的话慢 1 倍不到,毕竟异步 io ,二进制解包没什么好的解决方案
    sujin190
        8
    sujin190  
    OP
       2015 年 12 月 4 日
    @zenliver 其实也是参照 motor ,最初实现了 https://github.com/snower/TorMySQL ,后来又对 thrift 改了一下, thrift 标准 python 库里有 tornado server ,但其在整个协议头又加了个包头,先发送整个数据长度,这样 tornado 收到解包会快一些,但没办法和其他语言互通,也是坑
    jsongo
        9
    jsongo  
       2016 年 8 月 31 日
    好久的贴。不能和其他语言互通的问题,今天也遇到了,不过找到了解决方法,共享下。 https://issues.apache.org/jira/browse/THRIFT-2335 这里有提到,用 TFramedTransport 就可以了。
    sujin190
        10
    sujin190  
    OP
       2016 年 9 月 1 日
    @jsongo 确实是,不过可能有时候很难指定用什么吧,不过经过很多次需改之后,现在的版本完全可以使用任意传输协议,性能也只比线程版本低百分之 30 左右,已经很快了
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   3507 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:44 · PVG 12:44 · LAX 20:44 · JFK 23:44
    ♥ Do have faith in what you're doing.