Deferred
是在Twisted中进行异步处理的好方法。但是,顾名思义,它们用于延迟计算,它只运行和终止一次,触发一次回调。如果我有一个重复的计算,如点击一个按钮怎么办?是否有任何类似于Deferred
的对象可以反复触发,只要它被触发就调用附加到它的所有回调?
答案 0 :(得分:3)
我现在已经设置好了。对于我有限的用例,它可以满足我的需求。
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)
有人告诉我这是不是很糟糕。
答案 1 :(得分:0)
您可能正在寻找的是defer.inlineCallbacks
,它允许您使用生成器来创建顺序的Deferred链。基本上你可以创建一个永远不会结束(或有条件地结束)的生成器,并从中继续生成Deferred。
在krondo.com使用inlineCallbacks
时有一篇很好的文章。