Retorcido: aplazado que dispara repetidamente?

Deferred s Deferred son una excelente manera de realizar un procesamiento asíncrono en Twisted. Sin embargo, como el nombre lo indica, son para cálculos diferidos, que solo se ejecutan y terminan una vez, activando las devoluciones de llamada una vez. ¿Qué pasa si tengo un cálculo repetido, como hacer clic en un botón? ¿Hay algún objeto de tipo Deferred que pueda dispararse repetidamente, llamando a todas las devoluciones de llamada adjuntas cada vez que se dispara?

He configurado esto por ahora. Para mi caso de uso limitado hace lo que quiero.

 class RepeatedDeferred: def __init__(self): self.callbacks = [] self.df = defer.Deferred() def addCallback(self, callback): self.callbacks.append(callback) self.df.addCallback(callback) def callback(self, res): self.df.callback(res) self.df = defer.Deferred() for c in self.callbacks: self.df.addCallback(c) 

Alguien me avise si esto es terrible.

Lo que podría estar buscando es defer.inlineCallbacks que le permite usar un generador para crear una cadena secuencial de aplazados. Esencialmente, simplemente puede crear un generador que nunca termine (o termine condicionalmente) y continúe generando diferidos a partir de eso.

Hay una gran reseña sobre el uso de inlineCallbacks en krondo.com .