当前位置: 首页 > news >正文

thrift实例:python实现

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

 

编译版本: python 2.7+, thrift-0.10.0.exe

参考文档: 

http://www.tuicool.com/articles/FnY3eiQ

http://www.cnblogs.com/enternal/p/5275455.html

https://my.oschina.net/u/780876/blog/691293

https://my.oschina.net/michao/blog/550416

 

项目目录结构

<项目名>:

    test: 测试代码包

    ds: 数据结构包,thrift生成的py放在这里

    thrift: thrift文件存储目录

 

代码

helloworld.thrift

#helloworld.thrift
#建议设定namespace
namespace java org.sl.thrift
namespace py slthrift

service Hello  {
    string helloString(1:string word)
}

 

生成python代码 (windows下,需要下载thrift编译器, http://apache.fayea.com/thrift/0.10.0/thrift-0.10.0.exe,建议改个名)

thrift --gen py -out ../ds helloworld.thrift

执行后,会在ds目录下生成 (子目录slthrift)python代码

 

test目录下,python 测试代码

thriftserver.py

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
__author__ = 'shanl'
import sys

reload(sys)
sys.setdefaultencoding('utf-8')
sys.path.append('../ds/slthrift') #注意这里

from slthrift import Hello
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer

SERVICE_CFG = {
    'ip': '0.0.0.0',  #向所有ip开放
    'port': 9000
}

class HelloHandler(Hello.Iface):
    def helloString(self, word):
        ret = "Received: " + word
        return ret

handler = HelloHandler()
processor = Hello.Processor(handler)
transport = TSocket.TServerSocket(SERVICE_CFG['ip'], SERVICE_CFG['port'])
tfactory = TTransport.TBufferedTransportFactory()
pfactory  = TBinaryProtocol.TBinaryProtocolFactory()
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
print "thrift server listen in '%s:%s'." % (SERVICE_CFG['ip'], SERVICE_CFG['port'])
server.serve()
print "done!"

 

thriftclient.py

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
__author__ = 'shanl'
import sys

reload(sys)
sys.setdefaultencoding('utf-8')
sys.path.append('../ds/slthrift')

from slthrift import Hello
from thrift.transport import TSocket
from thrift.protocol import TBinaryProtocol
import random

SERVICE_CFG = {
    'ip': '127.0.0.1',
    'port': 9000
}

transport = TSocket.TSocket(SERVICE_CFG['ip'], SERVICE_CFG['port'])
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = Hello.Client(protocol)
transport.open()
for i in xrange(100):
    print client.helloString('%s' % (random.randint(1000, 9999)))
transport.close()

 

转载于:https://my.oschina.net/tangcoffee/blog/882540

相关文章:

  • 微信开放平台手机APP支付
  • px PPI
  • fedora25输入法,中文输入法该用哪个——rime
  • 如何培养《未来架构师》(1)
  • 数字格式化工具:Numeral.js 简介
  • nginx防盗链和内核参数优化
  • 三列布局
  • ActFramework r1.2.0 带来的新特性
  • p2p网贷3种运营模式
  • [转][译] Closures in Lua - Lua中的闭包
  • MyBatis介绍和架构
  • JS 创建对象的5种写法
  • python之转义字符(学习笔记三)
  • 1015. 德才论 (25)
  • atitit. groupby linq的实现(1)-----linq框架选型 java .net php
  • ➹使用webpack配置多页面应用(MPA)
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • CODING 缺陷管理功能正式开始公测
  • conda常用的命令
  • ES6语法详解(一)
  • mysql_config not found
  • spring + angular 实现导出excel
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 高性能JavaScript阅读简记(三)
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 开发基于以太坊智能合约的DApp
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 用Visual Studio开发以太坊智能合约
  • 白色的风信子
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • # 数论-逆元
  • (007)XHTML文档之标题——h1~h6
  • (12)Linux 常见的三种进程状态
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (C语言)球球大作战
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (转)shell中括号的特殊用法 linux if多条件判断
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .Net程序帮助文档制作
  • .net反混淆脱壳工具de4dot的使用
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • /proc/stat文件详解(翻译)
  • @requestBody写与不写的情况
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [20170705]diff比较执行结果的内容.txt
  • [20171106]配置客户端连接注意.txt