[Twisted-Python] XML-RPC for paralell clients

Pet petshmidt at googlemail.com
Tue May 19 01:51:39 MDT 2009


Hi,

after playing with reactor, factory and protocol, I'm trying to
implement XML-RPC server, but it seems that it is not able to handle
several clients in parallel. If I call the slow function with first
client  and then with second client a fast function, second client
will receiver the results after slow function returned. There is no
factory for clients in server.Site() like in Protokoll? What is the
way to do that for XML-RPC?

Thanks for your help!
Pet

from twisted.web import xmlrpc, server
from twisted.application import internet

from time import sleep


PORT = 11111

class ExampleXMLRPCProtokoll(xmlrpc.XMLRPC):
    """An example object to be published."""
    def xmlrpc_echo(self, x):
        """
        Return all passed args.
        """
        return x

    def xmlrpc_add(self, a, b):
        """
        Return sum of arguments.
        """
        return a + b

    def xmlrpc_addslow(self, a, b):
        """
        Return sum of arguments. takes time
        """
        sleep(20)
        return a + b

    def xmlrpc_fault(self):
        """
        Raise a Fault indicating that the procedure should not be used.
        """
        raise xmlrpc.Fault(123, "The fault procedure is faulty.")


class ExampleXMLRPCService(internet.TCPServer):

    def __init__(self):
        print "Starting XML-RPC Service..."
        r = ExampleXMLRPCProtokoll()
        internet.TCPServer.__init__(self,PORT,server.Site(r))



def main():
    from twisted.internet import reactor
    r = ExampleXMLRPCProtokoll()
    reactor.listenTCP(PORT, server.Site(r))
    reactor.run()



if __name__ == '__main__':
    main()




More information about the Twisted-Python mailing list