python使用thrift简单方法

第一步

在有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__ = "[email protected]"

__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简单方法)