ドキュメントといくつかのユースケースを読んだ後。コールバックのチェーンをどのように使用するかという質問が生じました。より正確には、コールバック間でデータを転送する方法
コードは次のとおりです。
d = defer.Deferred()
d.addCallback(self.min_active_stack)
d.addCallback(self.min_normalization)
d.addCallback(self.insert_db)
d.callback(0)
def min_active_stack(self,d):
...
return self.dbconn.runQuery(sql_query)
def min_normalization(self,min):
...
return min[0][0]+self.x
def insert_db(self,min_norm):
...
return self.dbconn.runQuery(sql_query)
まず、min_active_stackで、dbにリクエストします。min_normalizationで、データを処理します。そして、処理されたデータのinsert_dbには、dbへのリクエストが1つあります。
この場合、データはチェーンを介して送信され、簡単です。しかし、チェーンの途中でコールバックよりも多く実行する必要がある場合はどうでしょうか。
d = defer.Deferred()
d.addCallback(self.min_active_stack)
d.addCallback(self.stack_shift)
d.addCallback(self.min_normalization)
d.addCallback(self.insert_db)
d.callback(0)
def stack_shift(self, d):
return self.dbconn.runQuery(query)
stack_shiftでは外部データは使用されませんが、min_active_stackの後、insert_dbの前に実行する必要があります。min_normalizationでは、min_active_stackではなくdeferredstack_shiftから取得されます。
私自身は、stack_shifttに行を追加することでこの問題を解決しました。
self.temp=d
そして、min_normalizationでself.tempを使用します。
しかし、正しい決定に関しては?