我有一个需求,需要类似有限状态机的功能,比如一个工作流程,有 4 个步骤,没个步骤都可能引发某种异常,或者返回某个值,这导致下一步需要执行的步骤存在多种可能,常规的写法是一大坨 if-else
,另外,步骤之间可能需要回滚重试,这使得 if-else
也不太好写。
我构想了一种方式,灵感来自有限状态机,初步的期望用法如下,但是我不知道要如何去实现?
@fsm(condition=Exception, method='step2')
@fsm(condition=True, method='step3')
@fsm(condition=False, method='step4')
def step1(arg):
return arg
@fsm(condition=Exception, method='step2', retry=3)
@fsm(condition=True, method='step3')
@fsm(condition=False, method='step4')
def step2(arg):
return arg
@fsm(condition=Exception, method='step1', retry=3)
@fsm(condition=True, method='step3')
@fsm(condition=False, method='step4')
def step3(arg):
return arg
@fsm(condition=Exception, retry=3)
def step4(arg):
return arg
# 启动流程。
step1('arg')
推测一下你想要实现的功能:
关于转发和重试时,后续动作函数的参数 arg,从你的描述中不太明白该取何值,将原 arg 传递到下游。代码实现如下: