有限事务状态机。

ftsm的Python项目详细描述


有限事务状态机

有限事务状态机是一种事务驱动的有限状态机。 事务可以是异常时还原的任何python可调用对象。 发生。

安装

pip3 install ftsm

它是如何工作的?

  1. 创建状态和可能的转换列表允许状态 过渡到。
    UNLOCKED=State('UNLOCKED',initial=True,allowed_transitions=['LOCKED'])LOCKED=State('LOCKED',initial=False,allowed_transitions=['UNLOCKED'])
  2. 初始化过渡状态机。
    tsm=TransactionalFiniteStateMachine(name='Lock')
  3. 将定义的状态添加到状态机。
    tsm.add(LOCKED)tsm.add(UNLOCKED)
  4. 创建事务并定义带或不带条件的回滚事务。
    t1=Transaction(target=func,args=('name',),rb_transactions=[t2],rb_conditions=[ExceptionCondition(KeyError)])
  5. 使用事务转换到新状态。
    withtsm.managed_transition(state=LOCKED,pre_transactions=[t1,t3],on_error_transactions=[t4],post_transactions=[t5]):func()

示例

fromftsmimportState,Transaction,TransactionalFiniteStateMachineclassLightController:defturn_off_light(self,room):print('turning the {} room light off.'.format(room))defturn_on_light(self,room):print('turning the {} room light on.'.format(room))light_controller=LightController()defturn_off_water():print('turning off the water.')defturn_on_water():print('turning on the water.')defwater_plants():print('watering the plants.')deflock_the_door():print('locking the door.')defunlock_the_door():print('unlocking the door.')UNLOCKED=State('UNLOCKED',initial=True,allowed_transitions=['LOCKED'])LOCKED=State('LOCKED',initial=False,allowed_transitions=['UNLOCKED'])tsm=TransactionalFiniteStateMachine(name='Lock')tsm.add(LOCKED)tsm.add(UNLOCKED)light_transaction=Transaction(target=light_controller.turn_off_light,args=('Living',),rb_transactions=[Transaction(target=light_controller.turn_on_light,args=('Living',))])water_transaction=Transaction(target=turn_off_water,rb_transactions=[Transaction(target=turn_on_water)])withtsm.managed_transition(state=LOCKED,pre_transactions=[light_transaction,water_transaction],on_error_transactions=[Transaction(unlock_the_door)],post_transactions=[Transaction(water_plants)]):lock_the_door()print(tsm.current_state)

上面的示例代码将导致以下输出。

turningtheLivingroomlightoff.turningoffthewater.lockingthedoor.wateringtheplants.<Statename=LOCKEDinitial=False>

如果在执行事务时发生错误,则执行还原事务 以相反的顺序,不会发生状态转换。

还可以使用ExceptionCondition使回滚事务成为条件事务。 提供类。

light_transaction = Transaction(
    target=light_controller.turn_off_light,
    args=('Living',),
    rb_transactions=[
        Transaction(target=light_controller.turn_on_light,
                    args=('Living',))
    ],
    rb_conditions=[ExceptionCondition(KeyError)])

只有在 交易执行。

用户可以将抽象Condition类扩展到定义的新条件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
面向java语句的方法与面向表达式的方法   密码学如何在java中为json对象签名?   是否可以通过java程序知道给定卡夫卡消费群体的消费偏移量?   打印字符时出现java未知问号   java为JFrame设置背景色   在ubuntu中检查java版本时linux权限被拒绝   如何用java创建xml模式   java无法在远程服务器上运行Vaadin应用程序   java智能垃圾收集?   java如何在SpringMVC中设置缓存头?   在unix计算机上运行java应用程序a:>签名以输入内容   Java、Apache Commons配置XML属性   使用ArrayList调用Java未经检查的方法   在文本文件中查找并替换单词(Java GUI)   java Android Studio无法检测到JDK7或更新版本   java从socket的有效负载获取事件消息   安卓中java调用子类方法   java如何通过点击超链接来运行jar文件(Firefox)