python - 同步 PySCXML

标签 python state-machine scxml

我目前正在研究 Python 的习惯用法和库,以帮助我设计控制任务的状态机。

我在另一个问题中找到了很好的建议:Python state-machine design 。 答案中,PySCXML建议允许解释 State Chart XML文件。

我对 PySCXML 自述文件中的以下句子感到担忧:

you can use the send method of the StateMachine instance to send events to your statemachine [...] Of course, you'll have to do the send from a different thread

这是否意味着我无法同步运行状态机处理?

当我想象在我的控制任务中使用 PySCXML 时:

  1. 读入输入
  2. 将输入转换为状态机域中的抽象输入变量
  3. 将变量发送到 PySCXML 状态机实例
  4. PySCXML 状态机实例计算新状态,并设置抽象输出变量
  5. 将抽象输出变量转换为输出
  6. 写出输出
  7. sleep 直到下一次

(如果 PySCXML 完全可以做到这一点。这将允许我将整个排序逻辑完全分离到 SCXML 文件中。)我需要按顺序处理所有步骤,尤其是 4. 不允许异步运行。

最佳答案

您尝试做的事情很有可能。尽管这确实行不通:

xml = '''\
<scxml version="1.0" datamodel="python">
    <state id="s1">
        <transition event="e" target="f" />
    </state>
    <final id="f" />
</scxml>
    '''
sm = Statemachine(xml)
sm.start()
# never runs
sm.send("e")

相反,请执行以下操作:

xml = '''\
<scxml version="1.0" datamodel="python">
    <state id="s1">
        <transition event="e" target="f" />
    </state>
    <final id="f" />
</scxml>
'''
sm = Statemachine(xml)
sm.start_threaded()
sm.send("e")

在它自己的 greenlet 中运行状态机的 maineventloop,让您可以在主线程中与它交互。 sm.send('e') 将阻塞,直到状态机进入稳定状态(即直到它等待进一步的外部事件)。

关于python - 同步 PySCXML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15003174/

相关文章:

qt - 如何测试 Qt SCXML 状态机

python - Groupby 并按顺序转换另一列

python - 在部署到 App Engine 期间不考虑 Gcloudignore 文件

state-machine - 用 Alloy 编写有限状态机规范

uml - 我应该如何使用 QM 建模工具实现正交组件

python - Python 中的简单状态机

statechart - 状态图模型的自动 scxml 代码合成

Python 绘图线链接值似乎从最后一个点绕回到第一个点

python - 如何处理 sklearn 中 GradientBoostingClassifier 中的大量缺失值

java - Commons SCXML - 强制跳转到给定状态