Python使用Thrift的代码分析

前言

  python使用方便,非常易用,第三方库的支持很全面,使用Python开发Thrift程序的步骤也相当简单,首需要需要配置Python及Thrift环境,然后根据thrift文件,由thrift模板生成器自动生成通信接口代码,具体的操作可以参考:http://www.cnblogs.com/jishilei/archive/2012/12/24/2830944.html

  python开发thrift,肯定会涉及到server和client,分别来看下:

Server端

  Server段需要实现Thrift里面的service方法,也就是自动生成代码中的Iface接口程序

  thrift文件中的service方法如下: 

service Calculator extends shared.SharedService {
   void ping(),
   i32 add(1:i32 num1, 2:i32 num2),
   i32 calculate(1:i32 logid, 2:Work w) throws (1:InvalidOperation ouch),  
   oneway void zip()

}

  Iface接口(位于gen-py/tutorial/Calculator.py)如下:

class Iface(shared.SharedService.Iface):
  def ping(self, ):
    pass

  def add(self, num1, num2):
    pass

  def calculate(self, logid, w):
    pass

  def zip(self, ):
    pass

   服务器端首先需要实现Iface接口,然后分别构造Thrift通信所必需的processor、Transport、BufferedTransportFactory、BinaryProtocolFactory等对象,然后构建server对象并启动serve()方法,具体实现代码如下:

  

handler = CalculatorHandler()
processor = Calculator.Processor(handler)
transport = TSocket.TServerSocket('localhost',port=9090)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()

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

print 'Starting the server...'
server.serve()

  如果有需要,你可以构建一个多线程的server程序,具体实现代码可以参考:

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

#或者:

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

Client端

  客户端使用Thrift服务的步骤为:创建一个socket对象,将socket对象封装为BinaryProtocol,然后通过BinaryProtocol反序列化编码创建代理客户端,有了client以后及可以执行各种Iface接口方法,具体代码如下:

  

  transport = TSocket.TSocket('localhost',9090)
  #为了提高性能,使用Buffer封装原生的socket连接
  transport = TTransport.TBufferedTransport(transport)
  protocol = TBinaryProtocol.TBinaryProtocol(transport)
  client = Calculator.Client(protocol)
  transport.open()

   #TODO
   transport.close()

 

posted @ 2012-12-25 10:01  季石磊  阅读(3836)  评论(0编辑  收藏  举报