用thrift搭一个单进程服务

首先写一个服务的功能类,例如print 一些东西

HelloHandler.py

#!/bin/python
#encoding=utf8

import os
import sys
import json
import hashlib
import logging
import time
import random
import traceback
import signal

import re
from datetime import datetime

cur_dir = os.path.dirname(os.path.abspath(__file__))

#加载thrift接口的路径
thrift_path = os.path.sep.join([cur_dir, 'utils', 'thrift', 'gen-py'])
sys.path.append(thrift_path)


class HelloHandler():
    def __init__(self):
        self.name = None


    def HelloWorld(self,name):
        self.name = name
        print name
        return name

    
if __name__ == '__main__':
    name = "haha"
    tt_obj = HelloHandler()
    tt_obj.HelloWorld(name)
time.sleep(3)

服务端程序:Hello_server.py

#!/bin/python
#encoding=utf8

import os
import sys
import json
import hashlib
import logging
import pymongo
import time
import traceback
import signal
import urllib
import urllib2
import mimetypes
import re
import ConfigParser
from datetime import datetime
from bson import json_util
from collections import defaultdict
from multiprocessing import Process

sys.path.append("../utils/thrift/gen-py")
from HelloHandler import HelloHandler
from IE_service import IEService

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

cur_dir = os.path.dirname(os.path.abspath(__file__))
cf = ConfigParser.ConfigParser()
conf_fn = os.path.sep.join([cur_dir, '../conf', 'thrift.conf'])
port = cf.read(conf_fn)
port = int(cf.get('thrift', 'port')) #这里设置端口

if __name__ == '__main__':
    '''
                level=logging.INFO 
                level=logging.WARNING 
                filename=cur_dir+'/var/SF_server.log' 
    '''
    logging.basicConfig( 
                level=logging.WARNING 
                , format='%(thread)d %(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s' 
            )
    handler = HelloHandler()
    processor = IEService.Processor(handler)
    transport = TSocket.TServerSocket(port=port)
    tfactory = TTransport.TBufferedTransportFactory()
    pfactory = TBinaryProtocol.TBinaryProtocolFactory()
    server = TServer.TThreadedServer(processor, transport, tfactory, pfactory)
    print 'starting server'
    server.serve()
    manager.join()
    print 'done'

IE_server.thrift

namespace py IE_service

service IEService

    string HelloWorld(1:string req_json);

}

客户端程序

Client.py

#!/bin/python
#encoding=utf8
import sys
sys.path.append('./gen-py')
from IE_service import *
from IE_service import IEService

from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
import json
try:
    transport = TSocket.TSocket('localhost', 62127) #端口为服务端设置的端口
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = IEService.Client(protocol)
    transport.open()
    req_dic = {"req_type":"type_doc", 
               "file_link":"/home/op/app/Project/msword-parser-server/bin/data/K0001-A.docx",
              }
    print 'start'
    res = client.HelloWorld(json.dumps(req_dic))
    print res
    transport.close()
except Thrift.TException as e:
    print 'exceptino'
    print e
原文地址:https://www.cnblogs.com/caitian/p/9306269.html