扭曲:推迟反复发射?

时间:2010-08-18 16:49:47

标签: python multithreading callback twisted

Deferred是在Twisted中进行异步处理的好方法。但是,顾名思义,它们用于延迟计算,它只运行和终止一次,触发一次回调。如果我有一个重复的计算,如点击一个按钮怎么办?是否有任何类似于Deferred的对象可以反复触发,只要它被触发就调用附加到它的所有回调?

2 个答案:

答案 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时有一篇很好的文章。