[Twisted-Python] Stackless Python Examples Re: InlineCallback Friendly ?

Andrew Francis andrewfr_ice at yahoo.com
Sat Apr 19 12:47:38 MDT 2008


Hi Folks:

--- Andrew Francis <andrewfr_ice at yahoo.com> wrote:

[J-P Calderone]
>The only kind of dispatcher which is really hostile
>towards inlineCallbacks is the kind which is
>hostile towards Deferreds in general - ie, one which
>requires a return value and does not support 
>Deferreds.

[A Francis] 
>Once again Jean-Paul, I find your explanation super
>helpful and save me time going down the wrong path. 

Based on Jean-Paul's explanation, here are some code
snippets showing how to handle other protocols with
Stackless Python and Twisted. This is a continuation
of the technique I used in "Adventures" to prevent the
reactor from deadlocking.

Currently I am rethinking the techniques - I believe
there is a way to reduce spawning tasklets - not that
tasklets are all that expensive....

Here is an example with resources adapted from the Abe
Fettig example on page 48 of "Twisted Network
Programming Essentials." I am still getting my feet
wet with resources. I intend to use this to help
prototype REST support in WS-BPEL.

class HomePage(resource.Resource):
    
    def doWork(self):
        message = """
        <html>
        <head>
        </head>
        <body>
        Hello World    
        </body>
        </html>
        """
        self.request.write(message)
        self.request.finish()
        
        
    def render(self, request):
        self.request = request
        stackless.tasklet(self.doWork)()
        return server.NOT_DONE_YET


and here is one with PyAMF .2

(I remember sketching this one out on a napkin at
PyCon 2008)

class EchoServer(TwistedGateway):
    def __init__(self):
        super(EchoServer, self).__init__()
        self.request = None
        return
        
    def __echo__(self, request, deferred, y):
        print "=>", request, deferred, y
        deferred.callback(y)
        
    
    def echo(self, request, y):
        print "=>", request, y
        deferred = defer.Deferred()
        stackless.tasklet(self.__echo__)(request,
deferred, y)
        return deferred

Cheers,
Andrew



      ____________________________________________________________________________________
Be a better friend, newshound, and 
know-it-all with Yahoo! Mobile.  Try it now.  http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ




More information about the Twisted-Python mailing list