[Twisted-Python] DeferredDict, defaultdict, map/reduce, silliness
Terry Jones
terry at jon.es
Sun Nov 2 21:06:17 EST 2008
This isn't meant to be taken too seriously - perhaps just food for someone
else to chew on while trying to relax...
I was thinking the other night about what a DeferredDict might look like,
what it might be useful for, if anything, etc. We have DeferredList of
course, so why not a dict? Then I also remembered collections.defaultdict
and couldn't resist the appeal of trying defaultdict(defer.Deferred). That
thinking led to the map/reduce silliness below. I don't know that it leads
anywhere - I was just playing around.
Terry
import sys
from collections import defaultdict
from twisted.internet import defer, reactor
class MapReduce(object):
def __init__(self, init, cb):
self.init = init
self.cb = cb
self.d = defaultdict(defer.Deferred)
def map(self, *keys):
for key in keys:
self.d[key].addCallback(self.cb)
def reduce(self):
def finalize(result, key):
return (key, result)
deferreds = []
for key, d in self.d.iteritems():
d.addCallback(finalize, key)
deferreds.append(d)
d.callback(self.init)
return defer.gatherResults(deferreds)
def main():
def printResult(result):
print result
reactor.stop()
mr = MapReduce(0, lambda x: x + 1)
for line in sys.stdin.readlines():
mr.map(*line.split())
d = mr.reduce().addCallback(printResult)
if __name__ == '__main__':
reactor.callLater(0, main)
reactor.run()
More information about the Twisted-Python
mailing list