allow 'ensure' to block if a transition is occurring
This commit is contained in:
parent
7968ca2892
commit
33602f232c
@ -147,11 +147,11 @@ class StateMachine(object):
|
|||||||
return _StateCtx(self, from_state, to_state, wait)
|
return _StateCtx(self, from_state, to_state, wait)
|
||||||
|
|
||||||
|
|
||||||
def ensure(self, state, wait=0.0):
|
def ensure(self, state, wait=0.0, block_on_transition=False ):
|
||||||
'''
|
'''
|
||||||
Ensure the state machine is currently in `state`, or wait until it enters `state`.
|
Ensure the state machine is currently in `state`, or wait until it enters `state`.
|
||||||
'''
|
'''
|
||||||
return self.ensure_any( (state,), wait=wait )
|
return self.ensure_any( (state,), wait=wait, block_on_transition=block_on_transition )
|
||||||
|
|
||||||
|
|
||||||
def ensure_any(self, states, wait=0.0, block_on_transition=False):
|
def ensure_any(self, states, wait=0.0, block_on_transition=False):
|
||||||
@ -180,7 +180,11 @@ class StateMachine(object):
|
|||||||
# threads to indicate they want to remain in a particular state.
|
# threads to indicate they want to remain in a particular state.
|
||||||
|
|
||||||
# will return immediately if no transition is in process.
|
# will return immediately if no transition is in process.
|
||||||
if block_on_transition: self.notifier.wait()
|
if block_on_transition:
|
||||||
|
# we're not in the middle of a transition; don't hold the lock
|
||||||
|
if self.lock.acquire(False): self.lock.release()
|
||||||
|
# wait for the transition to complete
|
||||||
|
else: self.notifier.wait()
|
||||||
|
|
||||||
start = time.time()
|
start = time.time()
|
||||||
while not self.__current_state in states:
|
while not self.__current_state in states:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user