由於問題有點寬泛,我必須假定一兩件事情。 例如,你沒有說明你打算如何提供事件來處理機器。
我應該實現一個循環還是有其他的方式來做到這一點?
那麼,這取決於你打算使用什麼樣的事件機制。有些實現會爲做,其他人不會。
你可以將一臺機器連接到一個事件隊列,你必須自己處理事件循環。在下面的例子中,我將隨機數字提供給一個模型,該模型將根據傳遞的數字使用機器來更改狀態。
from transitions import Machine
from threading import Thread
import random
import time
try:
from Queue import Queue
except ImportError: # Module has been renamed in Python 3
from queue import Queue
class Model(Thread):
def __init__(self, event_queue):
self.event_queue = event_queue
# has to be called whenever something inherits from Thread
super(Model, self).__init__()
def run(self):
while True:
event = self.event_queue.get(block=True)
# 0 will end the event loop
if event == 0:
return
# if the passed number is even, switch to Even state
elif event % 2 == 0:
self.even()
# switch to Odd state otherwise
else:
self.odd()
states = ['Even', 'Odd']
transitions = [['even', '*', 'Even'],
['odd', '*', 'Odd']]
event_queue = Queue()
model = Model(event_queue)
machine = Machine(model, states=states, transitions=transitions, initial='Even')
model.start()
for n in random.sample(range(1, 20), 5):
event_queue.put(n)
time.sleep(0.1)
print("Number {0} was passed to the model which is now in state {1}".format(n, model.state))
# shut down model thread
event_queue.put(0)
該模型實際上會塊直到它收到下一個事件,將關閉它接收到的事件0
的時刻。
大家好while循環,我忘了,我使用python轉換模塊quesiton提。 https://github.com/pytransitions/transitions –
你提供的不是Python工作的代碼......除了你可能想看'while'循環與'threading'配對 – gionni