[Twisted-Python] Question about XMLRPC, Sync and ASync
Andrew Francis
andrewfr_ice at yahoo.com
Sat Aug 7 12:36:02 MDT 2010
Hi Colin:
> Message: 1
> Date: Fri, 06 Aug 2010 11:02:33 -0700
> From: Colin Fox <greenenergy at gmail.com>
> Subject: [Twisted-Python] Question about XMLRPC, Sync and
> ASync
> To: twisted-python at twistedmatrix.com
> Message-ID: <4C5C4E39.6080807 at gmail.com>
> Content-Type: text/plain; charset=ISO-8859-1
> What I'm trying to do now has me a little stumped -- I have
> two servers, one of which answers XMLRPC requests, and it calls another
> one using the twisted basic.LineReceiver system.
I am a little confused about the basic.LineReceiver because I thought
that was used for creating server protocols?
> So I have an incoming XMLRPC request, and I need to issue a
> command to the other server and wait for it to come back before I
> respond to the xmlrpc call. So I'm trying to do an async call inside a
> synchronous call.
I'm a bit rusty but lets use this simple example of a XMLRPC server
making another XMLRPC request, processing the data and returning it:
class MyXMLRpcServer(xmlrpc.XMLRPC):
def __init__(self):
self.service = xmlrpc.Proxy("http://www.dude.com")
def xmlrpc_someFunction(self, *argv, **kwargs):
....
return self.service.callRemote(someFunction).\
addCallback(processResult)
self.service.callRemote returns a deferred. Returning a deferred
tells the reactor that someFunction() is not finished processing and
to call processResult when there is data from www.dude.com
eventually processResult(data) is called
def processResult(data)
"""
do something with data
"""
return result
This should return a result to the XMLRPC client.
Cheers,
Andrew
More information about the Twisted-Python
mailing list