簡體   English   中英

扭曲:推遲反復發射?

[英]Twisted: deferred that fires repeatedly?

Deferred s是在Twisted中進行異步處理的好方法。 但是,顧名思義,它們用於延遲計算,它只運行和終止一次,觸發一次回調。 如果我有一個重復的計算,如點擊一個按鈕怎么辦? 是否有任何Deferred的對象可以重復觸發,在觸發時調用附加到它的所有回調?

我現在已經設置好了。 對於我有限的用例,它可以滿足我的需求。

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)

有人告訴我這是不是很糟糕。

您可能正在尋找的是defer.inlineCallbacks ,它允許您使用生成器來創建順序的Deferred鏈。 基本上你可以創建一個永遠不會結束(或有條件地結束)並繼續從中生成Deferred的生成器。

krondo.com上使用inlineCallbacks有一個很好的寫法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM