Hello, The Twisted XML-RPC server does not come with system.multicall, a de facto standard method which allows a batch of methods to be called in a single request. I wrote an implementation which handles deferred results and ensures that exceptions in one method call do not prevent the other methods from executing. I had to add to the XMLRPCIntrospection class in order to include my method in the system namespace, even though it is not really an introspection method. It's also possible to subclass XMLRPCIntrospection from outside of xmlrpc.py and use putSubHandler instead of xmlrpc.addIntrospection to create the "system" namespace. Anyhow, let me know what you think. Patch follows. Thanks for making Twisted such a joy to read and use. Dave --- /usr/share/pyshared/twisted/web/xmlrpc.py 2008-09-05 02:18:26.000000000 -0700 +++ xmlrpc.py 2009-05-01 10:58:39.000000000 -0700 @@ -246,6 +246,33 @@ xmlrpc_methodSignature.signature = [['array', 'string'], ['string', 'string']] + def xmlrpc_multicall(self, calls): + """ + Boxcar multiple RPC calls in one request. + """ + results = [] + for call in calls: + name = call['methodName'] + params = call['params'] + method = self._xmlrpc_parent._getFunction(name) + try: + d = defer.maybeDeferred(method, *params) + g = defer.waitForDeferred(d) + yield g + result = [g.getResult()] + except Fault, f: + result = {'faultCode': f.faultCode, + 'faultString': f.faultString} + except Exception, e: + log.err(e) + result = {'faultCode': self.FAILURE, + 'faultString': 'error'} + results.append(result) + yield results + + xmlrpc_multicall = defer.deferredGenerator(xmlrpc_multicall) + xmlrpc_multicall.signature = [['array', 'array']] + def addIntrospection(xmlrpc): """