[Twisted-Python] Deferred usage clarification

Gary Poster gary at zope.com
Sun Jun 1 20:05:02 EDT 2003


Hi.  A newbie question: I'd like a bit of clarification in Deferred 
usage.  More specifically, it would be nice if one of the examples on 
the Twisted Deferred howto page used a real blocking call rather than a 
reactor.callLater.

So, to see if I'm on the right track, I'd like to modify the third code 
example to use a sleep, to make it better parallel the first code 
snippet on the howto page.

First, here it is from the page, without modification:

-----8<-----8<-----8<-----
from twisted.internet import reactor, defer

class Getter:
     def getData(self, x):
         # this won't block
         d = defer.Deferred()
         reactor.callLater(2, d.callback, x * 3)
         return d

def printData(d):
     print d

g = Getter()
d = g.getData(3)
d.addCallback(printData)

reactor.callLater(4, reactor.stop); reactor.run()
-----8<-----8<-----8<-----

Here's my modification.  Is this the right usage?

-----8<-----8<-----8<-----
from twisted.internet import reactor, defer
import time

class Getter:
     def getData(self, x):
         # this won't block
         d = defer.Deferred()
         reactor.callLater(0, self.doWork, x, d)
         return d

     def doWork(self, x, deferred):
         # churn, churn, churn
         time.sleep(2)
         deferred.callback(x * 3)

def printData(d):
     print d

g = Getter()
d = g.getData(3)
d.addCallback(printData)

reactor.callLater(4, reactor.stop); reactor.run()
-----8<-----8<-----8<-----

Thanks!

Gary





More information about the Twisted-Python mailing list