创建多进程服务器:在项目开发中 开始使用多线程服务器,响应客户端请求,由于服务器端调用的函数操作使用了静态变量(线程间共享)导致错误,没有办法只有考虑使用多进程服务器。
多进程和多线程服务器很类似,只是继承的类不同。
多进程xmlrpc服务器代码(python2.7)如下:
# This Python file uses the following encoding: utf-8
'''
Created on May 28, 2015
@author: root
'''
try:
import fcntl
except ImportError:
fcntl = None
from SimpleXMLRPCServer import SimpleXMLRPCDispatcher,SimpleXMLRPCRequestHandler
from SocketServer import ForkingTCPServer
class XmlRPCForkServer(ForkingTCPServer,
SimpleXMLRPCDispatcher):
allow_reuse_address = True
_send_traceback_header = False
def __init__(self, addr, requestHandler=SimpleXMLRPCRequestHandler,
logRequests=True, allow_none=False, encoding=None, bind_and_activate=True):
self.logRequests = logRequests
SimpleXMLRPCDispatcher.__init__(self, allow_none, encoding)
ForkingTCPServer.__init__(self, addr, requestHandler, bind_and_activate)
if fcntl is not None and hasattr(fcntl, 'FD_CLOEXEC'):
flags = fcntl.fcntl(self.fileno(), fcntl.F_GETFD)
flags |= fcntl.FD_CLOEXEC
fcntl.fcntl(self.fileno(), fcntl.F_SETFD, flags)
server=XmlRPCForkServer(("",8080),SimpleXMLRPCRequestHandler,True)
def add(a, b): #这个响应方法含有参数
import time
time.sleep(20)
return a + b
def multi(a, b): #这个响应方法含有参数
# time.sleep(10)
return a * b
server.register_function(add,'add')
server.register_function(multi,'multi')
server.serve_forever()
附: 多线程xmlrpc服务器代码(python2.7 ):
# This Python file uses the following encoding: utf-8
'''
Created on May 28, 2015
@author: root
'''
try:
import fcntl
except ImportError:
fcntl = None
from SimpleXMLRPCServer import SimpleXMLRPCDispatcher,SimpleXMLRPCRequestHandler
from SocketServer import ThreadingTCPServer
class XmlRPCThreadingServer(ThreadingTCPServer,
SimpleXMLRPCDispatcher):
allow_reuse_address = True
_send_traceback_header = False
def __init__(self, addr, requestHandler=SimpleXMLRPCRequestHandler,
logRequests=True, allow_none=False, encoding=None, bind_and_activate=True):
self.logRequests = logRequests
SimpleXMLRPCDispatcher.__init__(self, allow_none, encoding)
ThreadingTCPServer.__init__(self, addr, requestHandler, bind_and_activate)
if fcntl is not None and hasattr(fcntl, 'FD_CLOEXEC'):
flags = fcntl.fcntl(self.fileno(), fcntl.F_GETFD)
flags |= fcntl.FD_CLOEXEC
fcntl.fcntl(self.fileno(), fcntl.F_SETFD, flags)
server=XmlRPCThreadingServer(("",8080),SimpleXMLRPCRequestHandler,True)
def add(a, b): #这个响应方法含有参数
import time
time.sleep(20)
return a + b
def multi(a, b): #这个响应方法含有参数
# time.sleep(10)
return a * b
server.register_function(add,'add')
server.register_function(multi,'multi')
server.serve_forever()
本文详细介绍了如何在项目开发中遇到线程间共享静态变量导致错误时,转而使用多进程服务器解决的方法。通过提供Python 2.7环境下多进程XMLRPC服务器的代码实现,对比了多进程与多线程服务器的差异,并通过实例演示了如何注册响应方法。此教程旨在帮助开发者理解并应用多进程技术提高服务器性能。
1665

被折叠的 条评论
为什么被折叠?



