时间:2021-05-22
说明
1. 状态机是一个非常实用的理论。在涉及到复杂的场景,建立状态机模型,能带来极大的方便。比如,网络连接、模型状态、业务逻辑。
2. 状态机并不复杂, 重要的是它的思想,能够极大减轻复杂度。使用时关键在于定义好事件和动作。
基本概念
github
https://github.com/pytransitions/transitions
安装
pip install transitions简单示例
# 连接协议状态机from transitions.extensions import HierarchicalMachine as Machinefrom transitions.extensions.nesting import NestedStateclass 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 1self.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 2self.machine.add_transition('disconnect', "STATE_CONNECTED", "STATE_NOT_CONNECTED") # transition 3self.machine.add_transition('select', "STATE_CONNECTED_NOT_SELECTED", "STATE_CONNECTED_SELECTED") # transition 4self.machine.add_transition('deselect', "STATE_CONNECTED_SELECTED", "STATE_CONNECTED_NOT_SELECTED") # transition 5self.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.statemachine.is_<state_name>()定义状态
# 状态可以是三种类型: 对象、字符串、字典from transitions import Statestates = [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以上就是python 实用工具状态机transitions的详细内容,更多关于python transitions的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一.设置客户端网络实用工具点击“开始”-“程序”,在“MicrosoftSQLServer”菜单中选择“客户端网络实用工具”。在“别名”选项中点击“添加”。在“
一.设置客户端网络实用工具点击“开始”-“程序”,在“MicrosoftSQLServer”菜单中选择“客户端网络实用工具”。在“别名”选项中点击“添加”。在“
SQLServer端口,我们可以通过"服务器端网络试用工具"和"客户端实用工具"来设定,设定方法是: 分别使用"服务器端网络试用工具"和"客户端实用工具"
在CAD中显示点步骤: 1、首先将CAD这款软件打开,然后进入到CAD的操作界面; 2、打开CAD之后在菜单区里找到实用工具选项; 3、点击实用工具选项的
在CAD中画点步骤: 1、首先将CAD这款软件打开,然后进入到CAD的操作界面; 2、打开CAD之后在菜单区里找到实用工具选项; 3、点击实用工具选项的下