實用工具狀態機transitions

2021-10-10 17:04:51 字數 2910 閱讀 7486

狀態機是乙個非常實用的理論。在涉及到複雜的場景,建立狀態機模型,能帶來極大的方便。比如,網路連線、模型狀態、業務邏輯。

狀態機並不複雜, 重要的是它的思想,能夠極大減輕複雜度。使用時關鍵在於定義事件和動作。

state: 狀態

event: 事件. 事件觸發狀態變換

action: 動作. event發生前或後執行的動作

transition: 變換. 狀態變換

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",]}]

# 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_()

# 狀態可以是三種型別: 物件、字串、字典

from transitions import state

states = [

state(name="solid"), # 物件

"liquid", # 字串

# 字典

]

# 定義函式

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

佛說大乘無量壽莊嚴清淨平等覺經pdf

淨土大經科註2014-doc

此生必看的科學實驗-水知道答案

印光大師十唸法(胡小林主講第1集)

python 實用工具狀態機transitions

說明 1.狀態機是乙個非常實用的理論。在涉及到複雜的場景,建立狀態機模型,能帶來極大的方便。比如,網路連線 模型狀態 業務邏輯。2.狀態機並不複雜,重要的是它的思想,能夠極大減輕複雜度。使用時關鍵在於定義好事件和動作。基本概念 github 安裝pip install transitions 簡單示...

linux實用工具

基本實用工具 ls 顯示檔名 list cat 顯示文字檔案內容 rm i 刪除檔案 remove i開啟選項 less more 分屏顯示檔案 hostname 顯示系統名 檔案操作 cp sourcefile destinationfile 複製檔案copy mv oldname newname...

Linux實用工具

特殊字元 轉義字元可以用 括起來,也可以在前面加上 基礎的一些命令 列出檔名 ls 顯示檔案文字內容 cat 刪除檔案 rm 顯示系統名 hostname 複製檔案 cp 更改檔名 mv 列印檔案 lpr 查詢字串 grep 顯示頭,尾檔案 head,tail 按順序顯示檔案內容 sort 刪除檔案...