首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在一个YAML配置文件中存储一台pytransitions机器

如何在一个YAML配置文件中存储一台pytransitions机器
EN

Stack Overflow用户
提问于 2017-12-10 04:23:45
回答 1查看 1.1K关注 0票数 1

我正在使用pytranstions库来构建有限状态机。

许多用户将机器的配置存储为YAML文件,这可以在@wtgee@limdautohere以及here的回复中看到。

现在,我可以看到如何创建一个YAML文件来存储状态和事务。但是,我不确定如何在YAML文件中存储与FSM关联的函数。

有人能教我怎么做吗?

EN

回答 1

Stack Overflow用户

发布于 2017-12-15 21:14:26

我不知道在YAML/JSON中存储实际模型及其函数的便捷方法。我假设您提到的工作流只是将函数名称存储在JSON中,如下所示:

代码语言:javascript
复制
{    
  "states": ["A", "B", "C"],
  "initial": "A",
  "transitions": [
    {"trigger": "go", "source": "A", "dest": "B", "after": "func_A"},
    {"trigger": "go", "source": "B", "dest": "C", "after": "func_B"}
  ]
}

或者YAML:

代码语言:javascript
复制
--- 
initial: A
states: 
  - A
  - B
  - C
transitions: 
  - 
    after: func_A
    dest: B
    source: A
    trigger: go
  - 
    after: func_B
    dest: C
    source: B
    trigger: go

当您将回调存储为String时,将立即计算它们的值,并触发事件(在本例中为go)。让我们假设我们已经将上面的JSON/YAML加载到一个名为d的Python字典中。当Dict键与transitions关键字相同时,您可以像这样初始化模型:

代码语言:javascript
复制
from transitions import Machine
class Model:

    def func_A(self):
        print("func A")

    def func_B(self):
        print("func B")


model = Model()
m = Machine(model, **d)
model.go()
model.go()

您可以向您的YAML添加一个描述字段model,它指定要加载的模型类(例如'module.models.TestModel'),并使用importlib导入模型定义dynamically。或者,您可以隐式定义所需的模型(例如,REST端点'/TestModel‘初始化TestModel)。如果你真的想在YAML中存储你的模型类定义,你可以用pickle/dill序列化这个类定义:

代码语言:javascript
复制
d["model"] = pickle.dumps(Model)
SerialisedModel = pickle.loads(d.pop("model"))
model = SerialisedModel()
m = Machine(model, **d)

如果您只想存储当前状态,可以直接序列化您的Machine实例:

代码语言:javascript
复制
d["machine_object"] = pickle.dumps(m)

不过,这比以前的方法透明度低得多。在任何情况下,您都应该避免使用函数引用来定义回调,因为这可能会在以后导致问题。也许pickle/dill也可以处理这一点,但我不会指望它。

Dave Kuhlmann here提出了更复杂的解决方案。他的帖子包括a)将有限状态机导出到JSON (机器-> JSON),b)从JSON生成Python FSM代码,c)将FSM注入到来自JSON的类中。所有这些都应该可以很容易地转移到YAML。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47732832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档