美文网首页
python使用thrift简单方法

python使用thrift简单方法

作者: 颩侢起塒 | 来源:发表于2018-12-11 16:53 被阅读0次

    第一步

    在有docker的服务器操作,如果没有 可以找一台闲置的机器安装docker

    yum install docker -y

    然后启动docker

    systemctl start docker

    第二步 下载thrift镜像

    docker pull thrift

    第三步

    准备thrift文件

    cat WebMonitor.thrift  定义了一个类的名字,以及定义了一个方法输出的值是string,

    输入的值1号位置是accesstime的string,2号位置是url的string

    service WebMonitorService {

        string  webAccess(1:string accesstime,2:string url)

    }

    在thrift文件所在位置运行docker

    docker run -v "$PWD:/data" thrift thrift -o /data  --gen py /data/WebMonitor.thrift

    运行后在当前目录生成一个文件夹,叫gen-py,里面有个文件夹叫WebMonitor对应的是thrift文件的名字

    在WebMonitor文件夹里有个py文件叫WebMonitorService.py的文件

    在之后编写的server.py以及client.py需要修改相应的配置

    在gen-py中编写server.py,其中的WebMonitorService以及webAccess以及webAccess方法里的参数需要跟thrift文件中定义的一一对应

    # -*- coding: UTF-8 -*-

    """

    # furyamber

    """

    from WebMonitor import WebMonitorService

    from thrift.transport import TSocket

    from thrift.transport import TTransport

    from thrift.protocol import TBinaryProtocol

    from thrift.server import TServer

    import datetime

    import sys

    reload(sys)

    import requests

    import subprocess

    sys.setdefaultencoding('utf-8')

    class WebMonitorServiceHandler:

        """

        # WebMonitorServiceHandler是中定义的方法用于实现在thrift文件中定义的接口

        """

        def __init__(self):

            self.log = {}

        def webAccess(self,accesstime,url):

            try:

                r = requests.get(url,timeout=1)

            except Exception,e:

                response_time=0

            else:

                response_time=int(r.elapsed.microseconds)

            print response_time

            return str(response_time)

    # 实例化Handler

    handler = WebMonitorServiceHandler()

    # 根据handler创建一个processor

    processor = WebMonitorService.Processor(handler)

    # 指定端口启动transport

    transport = TSocket.TServerSocket(port=9090)

    # 创建tfactory, pfactory

    tfactory = TTransport.TBufferedTransportFactory() 

    pfactory = TBinaryProtocol.TBinaryProtocolFactory() 

    # 创建Server

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

    print 'Starting the server...'

    # 启动server

    server.serve() 

    print 'done.'

    ⑥编写client.py文件

    #!/usr/bin/env python

    #-*- coding:utf-8 -*-

    __author__ = "furyamber@qq.com"

    __created__ = "2018-12-05 14:14:37"

    from WebMonitor import WebMonitorService

    from thrift import Thrift

    from thrift.transport import TSocket

    from thrift.transport import TTransport

    from thrift.protocol import TBinaryProtocol

    import datetime

    import time

    from apscheduler.schedulers.background import BackgroundScheduler

    def timedTask():

        now = int(time.time())

        now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

        try:

            # 连接Socket,根据实际情况修改为server所在的地址

            transport = TSocket.TSocket('192.168.1.30', 9090)

            # 获取Transport

            transport = TTransport.TBufferedTransport(transport)

            # 获取TBinaryProtocol

            protocol = TBinaryProtocol.TBinaryProtocol(transport)

            # 创建一个Client

            client = WebMonitorService.Client(protocol)

            # 连接通道transport

            transport.open()

            # 调用某个没有返回值的函数

            print client.webAccess(now,"http://www.baidu.com")

            # 调用某个有返回值的函数

            # 关闭通道transport

            transport.close()

        except Thrift.TException, tx:

            print '%s' % (tx.message)

    if __name__ == '__main__':

        # 创建后台执行的 schedulers

        scheduler = BackgroundScheduler() 

        # 添加调度任务

        # 调度方法为 timedTask,触发器选择 interval(间隔性),间隔时长为 2 秒

        scheduler.add_job(timedTask, 'interval', seconds=1)

        # 启动调度任务

        scheduler.start()

        while True:

            print(time.time())

            time.sleep(5)

    第七步

    把需要gen-py拷贝到需要的服务器或者客户机上,分别安装需要的python模块,可以把gen-py改成你想要的名字

    服务端运行要安装thrift木块以及requests模块

    然后运行python server.py启动服务端

    客户端要安装thrift以及APScheduler模块

    运行python client.py启动客户端

    相关文章

      网友评论

          本文标题:python使用thrift简单方法

          本文链接:https://www.haomeiwen.com/subject/hirxxqtx.html