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