

24/04/2005
Simple example of Twisted's DeferredQueue
cats:
While looking for something to solve a partucular problem, I came across Twisted's DeferredQueue. Although it was not what I was looking for it looked interesting so I knocked up a quick example:
import itertools
from twisted.internet import defer
from twisted.internet import reactor
from twisted.internet import task
FREQUENCY = 10
def startProducing(q):
"""Put an incrementing number in the queue every 1/FREQUENCY
seconds.
"""
counter = itertools.count()
def produce():
q.put(counter.next())
task.LoopingCall(produce).start(1.0/FREQUENCY)
def startConsuming(q):
"""Consume an object from the queue and print it.
"""
def consumer(o):
print o
q.get().addCallback(consumer)
q.get().addCallback(consumer)
q = defer.DeferredQueue()
startProducing(q)
startConsuming(q)
reactor.run()
