当前位置 : 主页 > 编程语言 > python >

Thrift的服务器和客户端Python案例

来源:互联网 收集:自由互联 发布时间:2022-06-15
服务器 Thrift提供的常见服务端类型有一下几种: thrift.server.TServer.TSimpleServer单线程服务器 thrift.server.TServer.TThreadedServer多线程服务器 thrift.server.TServer.TThreadPoolServer线程池服务器 thrift.


服务器

Thrift提供的常见服务端类型有一下几种:

  • thrift.server.TServer.TSimpleServer单线程服务器
  • thrift.server.TServer.TThreadedServer多线程服务器
  • thrift.server.TServer.TThreadPoolServer线程池服务器
  • thrift.server.TServer.TForkingServer多进程服务器

我们以线程池服务器为例,其他方式相同。

import sys
sys.path.append('gen-py') # 增加生成代码的查找包路径

from calculate import Calculate
from base.ttypes import InvalidOperation, Operation

from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TCompactProtocol
from thrift.server import TServer


class CalculateHandler(Calculate.Iface):
"""被调用方法的具体实现"""
def ping(self):
print('ping()')

def divide(self, num1, num2):
if num2 == 0:
raise InvalidOperation(0, 'Cannot divide by 0')
return num1 / num2

def calculate(self, work):
if work.op == Operation.ADD:
val = work.num1 + work.num2
elif work.op == Operation.SUBTRACT:
val = work.num1 - work.num2
elif work.op == Operation.MULTIPLY:
val = work.num1 * work.num2
else:
raise InvalidOperation(work.op, 'Invalid operation')
return val


if __name__ == '__main__':
handler = CalculateHandler()
processor = Calculate.Processor(handler)
transport = TSocket.TServerSocket(host='127.0.0.1', port=8888)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TCompactProtocol.TCompactProtocolFactory()

server = TServer.TThreadPoolServer(processor, transport, tfactory, pfactory)
server.serve()
print('服务器已启动')

客户端

import sys
sys.path.append('gen-py')

from calculate import Calculate
from base.ttypes import InvalidOperation, Operation, Work

from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TCompactProtocol


def main():
transport = TSocket.TSocket('127.0.0.1', 8888)

# 使用缓存传输
transport = TTransport.TBufferedTransport(transport)

# 使用压缩的二进制消息协议
protocol = TCompactProtocol.TCompactProtocol(transport)

client = Calculate.Client(protocol)

# 连接
transport.open()

client.ping()
print('ping()')

result = client.divide(100, 50)
print('100/50={}'.format(result))

try:
result = client.divide(100, 0)
except InvalidOperation as e:
print(e.why)

work = Work(1, 2, Operation.ADD)
result = client.calculate(work)
print('1+2={}'.format(result))

work = Work(15, 10, Operation.SUBTRACT)
result = client.calculate(work)
print('15-10={}'.format(result))

# 关闭
transport.close()


if __name__ == '__main__':
main()



【文章原创作者:武汉网站建设 http://www.wh5w.com欢迎留下您的宝贵建议】
上一篇:Python:爬虫框架Scrapy的安装与基本使用
下一篇:没有了
网友评论