2012-06-21 39 views
1

很好理解的是,像CGI那樣分派運行Python的進程比嵌入Python慢​​,就像WSGI一樣。我想使用包含在標準Python庫中的SimpleXMLRPCServer來實現一個XML-RPC接口,並且我已經有一個通過CGI工作的實現。我相信應該有一個更快的方法。我想嘗試WSGI,但首先我需要一個WSGI的請求處理程序,並且在SimpleXMLRPCServer中似乎沒有一個。我是否全部弄溼了,還是在Python 2.6,2.7,3.x下的標準庫中沒有這種功能?CGIXMLRPCRequestHandler的WSGI替代品?

這裏是我的初步實施WSGI替代CGIXMLRPCRequestHandler的:

from xmlrpclib import SimpleXMLRPCDispatcher 


class WSGIXMLRPCRequestHandler(SimpleXMLRPCDispatcher): 
    """Simple handler for XML-RPC data passed through WSGI.""" 

    def __init__(self, allow_none = False, encoding = None): 
    SimpleXMLRPCDispatcher.__init__(self, allow_none, encoding) 


    def __call__(self, environ, start_response): 
    """Parse and handle a single XML-RPC request""" 
    result = [] 
    method = environ['REQUEST_METHOD'] 
    headers = [('Content-type', 'text/html')] 

    if method != 'POST': 
     # Default implementation indicates an error because XML-RPC uses the POST method. 
     code    = 400 
     message, explain = BaseHTTPServer.BaseHTTPRequestHandler.responses[code] 

     status = '%d %s' % (code, message) 

     if method == 'HEAD': 
     response = '' 
     else: 
     response = BaseHTTPServer.DEFAULT_ERROR_MESSAGE % {'code' : code, 'message' : message, 'explain' : explain} 
    else: 
     # Dispatch XML-RPC to implementation 
     status = '200 OK' 
     request = environ['wsgi.input'].read(int(environ['CONTENT_LENGTH'])) 
     response = self._marshaled_dispatch(request) 

    length = len(response) 

    if length > 0: 
     result = [response] 

    headers.append(('Content-length', str(length))) 
    start_response(status, headers) 

    return result 

回答

1

看看this希望能對大家有所幫助。