文档章节

Python Thrift 使用示例,附完整代码

echx
 echx
发布于 03/15 19:02
字数 371
阅读 8
收藏 1

系统环境:Mac

开发环境:Idea

Python版本:2.7

开发环境准备:idea可安装thrift插件,https://plugins.jetbrains.com/plugin/7331-thrift-support

Mac系统安装thrift:

brew install thrift

成功后:

$ thrift -version
Thrift version 0.12.0

编辑Thrift接口文件:ocrservice.thrift,内容如下:

namespace cpp test
namespace java com.test.thrift

service OCRService {
   string recognizeWithFile(1:binary file, 2:string uuid, 3:map<string, string> meta);
}

server.py 为服务端代码

# coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
# Add import thrift.
sys.path.append('gen-py')
from ocrservice import OCRService
from ocrservice.ttypes import *
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer
import logging
logging.basicConfig(level=logging.INFO)

# Import prds
sys.path.append('prds')

class OCRHandler:

    def __init__(self):
        print("handler")

    def recognizeWithFile(self, image_buffer, uuid, meta):
        print("get from client")
        return "hello there!"

if __name__ == '__main__':
    print("begin...")
    handler = OCRHandler()
    processor = OCRService.Processor(handler)
    transport = TSocket.TServerSocket("127.0.0.1", "9080")
    tfactory = TTransport.TBufferedTransportFactory()
    pfactory = TBinaryProtocol.TBinaryProtocolFactory()

    server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)

    print "Starting thrift service......"
    server.serve()
    print "Done!"

client.py 为客户端代码

#!/usr/bin/python
# coding:utf-8

import sys, os, re
sys.path.append('gen-py')

# Add import thrift
from ocrservice import OCRService
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol

try:
    transport = TSocket.TSocket("127.0.0.1", 9080)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = OCRService.Client(protocol)
    transport.open()
    print client.recognizeWithFile(None, None, None)

    transport.close()

except Thrift.TException, ex:
    print "%s" % (ex.message)

 

启动server端前,需要用thrift命令生产python脚本

thrift --gen py ocrservice.thrift

没有输出,看到当前目录下多一个目录,包含一系列文件,此时可以正常启动python进程了。

python server.py
python client.py

© 著作权归作者所有

共有 人打赏支持
echx
粉丝 8
博文 11
码字总数 11811
作品 0
丰台
架构师
私信 提问
利用Python打造一个多人在线匿名聊天的小程序!(前后端完整开发)

最近看到好多设计类网站, 都提供了多人在线匿名聊天的小功能, 感觉很有意思, 于是自己就用django框架写了一个, 支持手动实时更名, 最下方提供了完整的源码. 在线聊天(不需要登录,开一个窗口,...

Python新世界
2018/07/25
0
0
手把手教你通过Thrift 访问ApsaraDB for HBase

Thrift 多语言接入 Thrift 提供多语言访问HBase的能力,支持的语言包从Thrift官网看括: C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk,......

玄陵
2018/08/03
0
0
使用Java快速入门Thrift

Apache Thrift是一个facebook建立的RPC框架,现在是一个Apache的顶级项目。Thrift允许通过一个跨语言的定义文件的方式定义数据类型和服务接口,这个文件作为RPC客户端和服务器通信的标准,你...

王振威
2012/07/08
0
12
Facebook如何在4年间全面转向Python3?

策划编辑 | Natalie 作者 | Jake Edge 编译 | Debra 编辑 | Vincent AI 前线导读:过去几年,Python 3 的采用量明显增加,但它仍有很长的路要走。采用 Python 的大型公司倾向于在其基础架构上...

AI前线
2018/07/01
0
0
CRUD并不易-- --谈微服务中的序列化场景

在上一篇文章中说到了验参,现在接着说另一个微服务中的工程性问题,序列化。 作为编写业务的程序员,常被戏称为CRUD程序写,会增删改查,给个if else给个for就能混碗饭吃。此话倒不假。 在面...

古二白
2018/08/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

欧拉公式

欧拉公式表达式 欧拉公式的几何意 cosθ + j sinθ 是个复数,实数部分也就是实部为 cosθ ,虚数部分也就是虚部为 j sinθ ,对应复平面单位圆上的一个点。 根据欧拉公式和这个点可以用 复指...

sharelocked
25分钟前
1
0
burpsuite无法抓取https数据包

1.将浏览器和burpsuite的代理都设置好 2.在浏览器地址栏输入: http://burp 3.下载下面的证书,并将证书导入浏览器 cacert.der

Frost729
50分钟前
0
0
JeeSite4.x 消息管理、消息推送、消息提醒

实现统一的消息推送接口,包含PC消息、短信消息、邮件消息、微信消息等,无需让所有开发者了解消息是怎么发送出去的,只需了解消息发送接口即可。 所有推送消息均通过 MsgPushUtils 工具类发...

ThinkGem
今天
6
0
OpenML

https://www.openml.org/search?type=data

shengjuntu
今天
2
0
java强引用,软引用,弱引用和虚引用

先来简要说一下这四种引用的特性: 强引用:如果一个对象具有强引用,那垃圾回收器绝不会回收它 软引用:如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它 弱引用:在垃圾...

woshixin
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部