【问题标题】:Twisted: deferred that fires repeatedly?Twisted:延迟重复触发?
【发布时间】:2011-03-31 16:21:46
【问题描述】:

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

【问题讨论】:

  • 字面意思是四年了,但是有人给了我很满意的here

标签: python multithreading callback twisted


【解决方案1】:

我现在已经设置好了。对于我有限的用例,它可以满足我的需求。

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)

如果这很糟糕,请告诉我。

【讨论】:

    【解决方案2】:

    您可能正在寻找defer.inlineCallbacks,它允许您使用生成器来创建延迟的顺序链。本质上,您可以创建一个永不结束(或有条件地结束)的生成器,并继续从中生成 Deferred。

    krondo.com 上有一篇关于使用inlineCallbacks 的精彩文章。

    【讨论】:

    • 呵呵很棒的功能。让我想起了 Haskell 中的单子,有点。不过,我认为这不是我要找的东西。等不晚了我再考虑考虑
    猜你喜欢
    • 2012-05-27
    • 2015-03-15
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多