python多线程XML-RPC的实现

  
Python 多线程XML-RPC的实现
一、 引言
用Python的SimpleXMLRPCServer实现的XML-RPC服务器只能是单线程,一个一个的处理请求,对于操作中耗时较长的操作会阻塞其他用户请求,使服务质量下降,因此有没有办法让SimpleXMLRPCServer成为多线程服务器呢?
主要有两种实现方法:修改SimpleXMLRPCServer的实现代码,用ThreadingMixIn或 ForkingMixIn。
 
二、 修改SimpleXMLRPCServer的实现代码
SimpleXMLRPCServer的实现如下:
class SimpleXMLRPCServer(SocketServer.TCPServer,
                         SimpleXMLRPCDispatcher):
如果我们将其继承的SocketServer.TCPServer,改为支持线程处理的ThreadingTCPServer,即可将SimpleXMLRPCServer变成多线程的服务器,如下:
class SimpleXMLRPCServer(SocketServer.ThreadingTCPServer,
                         SimpleXMLRPCDispatcher):
 
三、 用ThreadingMixIn实现
SocketServer模块中就支持对线程(Threading)或进程(Fork)的支持,典型代码如下:
import  SimpleXMLRPCServer,SocketServer
import win32api,thread
#The server object
class Server:
    count=0
    def __init__(self):
        pass
    def echoString(self, strs):
        mutex.acquire() #用mutex锁住数据
        Server.count+=1 #更改静态数据
        t=time.strftime("Serve at %I:%M:%S Id is ")+str(Server.count)
        print "Serve Id "+str(Server.count)
        mutex.release()#释放锁
        #win32api.Sleep(20000)
        return t
#多线程实现
class RPCThreading(SocketServer.ThreadingMixIn, SimpleXMLRPCServer.SimpleXMLRPCServer):
    pass
global mutex
mutex =thread.allocate_lock()
server_object = Server()
server = RPCThreading(("localhost", 8888))
server.register_instance(server_object)
#Go into the main listener loop
print "Listening on 8888"
server.serve_forever()
通过上面的代码也可以实现XML-RPC的多线程支持而不用修改Python的 SimpleXMLRPCServer库。
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值