实用工具状态机transitions
说明
1. 状态机是一个非常实用的理论。在涉及到复杂的场景,建立状态机模型,能带来极大的方便。比如,网络连接、模型状态、业务逻辑。
2. 状态机并不复杂, 重要的是它的思想,能够极大减轻复杂度。使用时关键在于定义好事件和动作。
基本概念
State: 状态
Event: 事件. 事件触发状态变换
Action: 动作. event发生前或后执行的动作
transition: 变换. 状态变换
github
https://github.com/pytransitions/transitions
安装
pip install transitions
简单示例
# 连接协议状态机 from transitions.extensions import HierarchicalMachine as Machine from transitions.extensions.nesting import NestedState class ConnectionStateMachine: """Connection state machine.""" def __init__(self, callbacks=None): """ :param callbacks: callbacks for the state machine """ self.callbacks = {} # 定义状态 self.states = ["STATE_NOT_CONNECTED", { 'name': "STATE_CONNECTED", # 状态名 'on_enter': self._on_enter_CONNECTED, # 进入状态触发 'on_exit': self._on_exit_CONNECTED, # 退出状态触发 'children': [ # 状态嵌套 "STATE_NOT_SELECTED", { 'name': "STATE_SELECTED", 'on_enter': self._on_enter_CONNECTED_SELECTED } ] }] # transition 1 self.machine = Machine(model=self, states=self.states, initial="STATE_NOT_CONNECTED", auto_transitions=False) if callbacks: self.callbacks = callbacks # 定义状态变换 self.machine.add_transition('connect', "STATE_NOT_CONNECTED", "STATE_CONNECTED_NOT_SELECTED") # transition 2 self.machine.add_transition('disconnect', "STATE_CONNECTED", "STATE_NOT_CONNECTED") # transition 3 self.machine.add_transition('select', "STATE_CONNECTED_NOT_SELECTED", "STATE_CONNECTED_SELECTED") # transition 4 self.machine.add_transition('deselect', "STATE_CONNECTED_SELECTED", "STATE_CONNECTED_NOT_SELECTED") # transition 5 self.machine.add_transition('timeoutT7', "STATE_CONNECTED_NOT_SELECTED", "STATE_NOT_CONNECTED") # transition 6 # 事件触发的动作 def _on_enter_CONNECTED(self): if "on_enter_CONNECTED" in self.callbacks: self.callbacks["on_enter_CONNECTED"]() def _on_exit_CONNECTED(self): if "on_exit_CONNECTED" in self.callbacks: self.callbacks["on_exit_CONNECTED"]() def _on_enter_CONNECTED_SELECTED(self): if "on_enter_CONNECTED_SELECTED" in self.callbacks: self.callbacks["on_enter_CONNECTED_SELECTED"]()
定义状态机
# 一般都是两种:不嵌套、嵌套 from transitions import Machine #不嵌套 from transitions.extensions import HierarchicalMachine as Machine # 嵌套 # 检查状态 machine.state machine.is_<state_name>()
定义状态
# 状态可以是三种类型: 对象、字符串、字典 from transitions import State states = [ State(name="solid"), # 对象 "liquid", # 字符串 {"name": "gas"} # 字典 ]
定义变换
# 定义函数 machine.add_transition(trigger, source, dest, ) trigger(str) 方法名,触发状态转换 source(str or list) 源状态 dest(str) 目标状态 # 加上变换 machine.add_transition(trigger="wake_up", source="asleep", dest="hanging out") machine.add_transition('work_out', 'hanging out', 'hungry') machine.add_transition('nap', '*', 'asleep') # 从任意状态变为asleep
2020年12月02日 18:32
Find out Reliable and Legit Ways for Extra Income from Home. You are welcome to our scam free world of online earning. legit extra income from home
2020年12月13日 20:13
Punjab National Bank is an Ideal destination for all Banking need, and PNB offer a wide range of personal banking services including loans, credit cards, savings through Internet banking facility, where PNB Netbanking is an important part of the Digital Banking platform for today, and it allows customers to access their account from anywhere and anytime, and PNB net banking is quick and convenient which gives you the liberty of not having to visit the bank branch, and you can avoid those long queues in the branches while saving enormous time and energy. Rajasthan Pay Manager
2020年12月18日 01:11
What a wonderful article, great piece of information. <a href="https://topcoupons.co/xbox-vs-ps4-one-controller-battery-life/">ps4 controller battery life</a>
2020年12月24日 15:50
Nice blog and absolutely outstanding. You can do something much better but i still say this perfect.Keep trying for the best. casino online canada
2020年12月26日 13:15
I am happy to find your distinguished way of writing the post. Now you make it easy for me to understand and implement the concept. Thank you for the post. types of government summary meaning 4 pillars of democracy
2020年12月29日 15:52
WBCHSE 12th Model Paper 2021 is released by West Bengal Council of Higher Secondary Education in the pdf form. Students appearing for West Bengal 12th Exams 2021 must practice and analyze previous year’s WBCHSE HS question papers as it will help them to become familiar with the exam pattern, marking scheme and the different styles of question that are asked in the paper. While solving the question paper they must keep in mind timing should not exceed the exam time as it will help them in finishing the exam on time. As per the previous year dates probably the exam will be held in February/March 2021. WBCHSE HS 12th Model Paper 2021 WB HS Suggestion West Bengal Council of Higher Secondary School Education WBCHSE Established in the Year 1951. The Board and Headquarters of the Board are Located in Salt Lake City, Kolkata India. WB 12th Suggestion 2021
2020年12月31日 18:26
Wow, What a Excellent post. I really found this to much informatics. It is what i was searching for.I would like to suggest you that please keep sharing such type of info.Thanks anonse transwestytów