检测Python中的状态突变



Python中有检测状态突变的方法吗?我正在开发一些软件,所有变异的状态都必须保存到外部数据库中,我想写一个自动测试来检测尚未持久化的状态。

更多关于这个问题的背景:我的软件有一套";工人;进程,并且这些进程可以随时重新启动。因此,如果重新启动工作进程,则有必要从数据库中恢复其状态。

我担心的是,可能存在未持久保存到数据库中的状态突变(因此在重新启动工作程序时无法恢复(。我想知道是否有任何方法可以自动对此进行缺陷处理。我很乐意检测所有状态突变,并排除我知道持久存在于数据库中的突变。

没有"内置的";就我在Python中所知,状态更改管理。但观察者模式可能会对你有所帮助。引用文章开头的话:

observer模式是一种软件设计模式,其中一个名为subject的对象维护其从属对象(称为observer(的列表,并自动通知它们任何状态更改,通常通过调用它们的一个方法。

一个典型的解决方案是枚举可能的状态。当对象更改状态时,可以通过枚举更新状态属性并通知观察者。

from enum import Enum, auto
class State(Enum):
START = auto()
ACTION = auto()
END = auto()
class MyObject: # observable
def __init__(self, conn):
self.observers = []
self.conn = conn
self.state = State.START

def subscribe(self, observer):
self.observers.append(observer)
def _notify(self):
for o in observers:
o.update()
def do_action(self, expr):
conn.execute(expr) # some SQL executed here
self.state = State.ACTION # update state
self._notify() # notify observers

def kill_conn(self):
conn.cancel() 
self.state = State.END
self._notify()
class MyLogger: # observer
def __init__(self, my_object):
self.my_object = my_object
self.my_object.subscribe(self)
def update(self):
match self.my_object.state: # Python 3.10 structural pat matching
case State.START: pass # your code here
case State.ACTION: pass # your code here
case State.END: pass # write current object to log file?
case _: pass # 'default' behavior is catching the rest fails

最新更新