설명서 및 몇 가지 유스 케이스를 읽은 후. 콜백 체인을 사용하는 방법에 대한 의문이 제기되었습니다.Twisted, Deferred 콜백 체인
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)
우선은 dB로 요청을 min_active_stack에 : 더 정확하게 여기
콜백
사이에서 데이터를 전송하는 방법을 코드입니다. min_normalization에서 데이터를 처리합니다. 그리고 insert_db는 처리 된 데이터에 db에 대해 하나의 요청을합니다.이 경우 체인을 통해 데이터가 전송되므로 간단합니다. 그러나 체인의 중간에 콜백을 실행해야한다면 어떻게 될까요? stack_shift에서
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)
는 외부 데이터를 사용하지 않는,하지만 min_active_stack 후 insert_db하기 전에 실행해야합니다. min_normalization은 min_active_stack 대신에 지연된 stack_shift에서 오는 것으로 밝혀졌습니다.
자신을 위해, 나는 stack_shiftt에 한 줄을 추가하여이 문제를 해결 : min_normalization에서
self.temp=d
및 사용 self.temp을.
그러나 올바른 결정은 무엇입니까?
가 왜 stack_shift에 collback을 추가 할 수 없습니다? 필요한 경우 addCallback에서 인수를 전달할 수도 있습니다. – varela