gpt4 book ai didi

python - 同步 PySCXML

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:24 27 4
gpt4 key购买 nike

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

我在另一个 SO 问题中找到了很好的建议: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. 睡到下一个

(如果 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 中运行状态机的主事件循环,让您可以在主线程中与它交互。 sm.send('e') 将阻塞,直到状态机进入稳定状态(即直到它等待进一步的外部事件)。

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com