专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »XML教程 » python多线程:Python 多线程XML-RPC的实现 »正文

python多线程:Python 多线程XML-RPC的实现

来源: 发布时间:星期四, 2009年2月12日 浏览:89次 评论:0


、 引言 
用PythonSimpleXMLRPCServer实现XML-RPC服务器只能是单线程处理请求对于操作中耗时较长操作会阻塞其他用户请求使服务质量下降因此有没有办法让SimpleXMLRPCServer成为多线程服务器呢? 
主要有两种实现思路方法:修改SimpleXMLRPCServer实现代码用ThreadingMixIn或 ForkingMixIn 
 
2、 修改SimpleXMLRPCServer实现代码 
SimpleXMLRPCServer实现如下: 
 SimpleXMLRPCServer(SocketServer.TCPServer, 
                         SimpleXMLRPCDispatcher): 
如果我们将其继承SocketServer.TCPServer,改为支持线程处理ThreadingTCPServer即可将SimpleXMLRPCServer变成多线程服务器如下: 
 SimpleXMLRPCServer(SocketServer.ThreadingTCPServer, 
                         SimpleXMLRPCDispatcher): 
 
3、 用ThreadingMixIn实现 
SocketServer模块中就支持对线程(Threading)或进程(Fork)支持典型代码如下: 
import  SimpleXMLRPCServer,SocketServer 
import win32api,thread 
#The server object 
 Server: 
    count=0 
    def __init__(self): 
        pass 
    def echoString(self, strs): 
        mutex.acquire #用mutex锁住数据 
        Server.count1 #更改静态数据 
        t=time.strftime(\"Serve at %I:%M:%S Id is \")+str(Server.count) 
        pr \"Serve Id \"+str(Server.count) 
        mutex.release#释放锁 
        #win32api.Sleep(20000) 
         t 
#多线程实现 
 RPCThreading(SocketServer.ThreadingMixIn, SimpleXMLRPCServer.SimpleXMLRPCServer): 
    pass 
global mutex 
mutex =thread.allocate_lock 
server_object = Server 
server = RPCThreading((\"localhost\", 8888)) 
server.register_instance(server_object)  [Page]
#Go o the  listener loop 
pr \"Listening on 8888\" 
server.serve_forever  

通过上面代码也可以实现XML-RPC多线程支持而不用修改Python SimpleXMLRPCServer库
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: