blinker는 순수한 Python이므로 GAE에서 사용하는 것이 매우 적합해야합니다. 입력 신호가 아니라 "올 수없는 경우 확실히 - and gate
, 내가 지시등 제공하지 않습니다 생각 -
은 그래서 당신은 이 개 다른 신호가 수신 된 신호를 트리거의 문제를 남겨 시간과 공간에서 분리되었다. 해당 엔티티 '키의 ID로 users.get_user().userid()
를 사용
class AndGate(ndb.Model):
a_received = ndb.BooleanProperty()
b_received = ndb.BooleanProperty()
:
는 그래서 같은 모델을 정의하는 것입니다.
그리고 우리는이, 나는 N>2
신호를 게이트 앞으로 생각하고 두 신호와 중복 조금 보이는
def got_a(*_):
k = ndb.Key('AndGate', users.get_user().userid())
ag = k.get()
if ag is None:
AndGate(a_received=True, b_received=False, key=k).put()
return
if ag.b_received:
k.delete()
signal('C').send('')
else:
ag.a_received = True
ag.put()
와 signal(A).connect(got_a)
및 signal(B).connect(got_b)
이있을 것이다하지만이 아니라면 당신은 분명히이 문제를 단순화 할 수 있습니다 문제가 있습니다.
예, 필요한 경우 원자 트랜잭션, 하나의 신호 만 받았고 일부 임계 값 X보다 오래되어보고되는 등등을 찾는주기적인 "가비지 수집"작업 등이 있습니다. 그러나, 당신의 사양을 올바르게 이해한다면 그것은 "작품의 많은 부분"으로 보일 수 없습니다.
고마워요,이게 내가 찾고있는 것입니다. 난 그냥 원자 트랜잭션에 대해 조금 궁금해, 나는 그것을 잘 할 수있는 MySQL과 함께, 이것은 처음으로 NDB와 함께 일하고있다. – Tarzan
하나의 엔티티, 가장 작은 엔티티 그룹을 다루기 때문에 :-),'def' 앞에 데코레이터'@ ndb.transactional'을 추가하기 만하면됩니다. 여러 엔터티를 대상으로 거래해야하는 경우에만 단일 엔터티 그룹, 즉 공통 조상을 공유해야합니다. –
오, 고마워. 너무 쉽습니다, xD. – Tarzan