Python 同步PySCXML

Python 同步PySCXML,python,state-machine,scxml,Python,State Machine,Scxml,我目前正在研究Python的习惯用法和库,帮助我为控制任务设计状态机 我在另一个问题中找到了很好的建议:。 在这些答案中,有人提出了一种解释文件的方法 我关注PySCXML自述中的以下句子: 您可以使用StateMachine实例的send方法将事件发送到您的StateMachine[…],当然,您必须从不同的线程进行发送 这是否意味着无法同步运行状态机处理? 当我想象在我的控制任务中使用PySCXML时: 读入输入 将输入转换为状态机域中的抽象输入变量 将变量发送到PySCXML状态机实例 P

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

我在另一个问题中找到了很好的建议:。 在这些答案中,有人提出了一种解释文件的方法

我关注PySCXML自述中的以下句子:

您可以使用StateMachine实例的send方法将事件发送到您的StateMachine[…],当然,您必须从不同的线程进行发送

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

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

  • 读入输入
  • 将输入转换为状态机域中的抽象输入变量
  • 将变量发送到PySCXML状态机实例
  • PySCXML状态机实例计算新状态,并设置抽象输出变量
  • 将抽象输出变量转换为输出
  • 写出输出
  • 睡到下一天

  • (如果这在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=''\
    '''
    sm=状态机(xml)
    sm.start()
    #从不跑步
    sm.发送(“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")
    
    xml=''\
    '''
    sm=状态机(xml)
    sm.start_线程化()
    sm.发送(“e”)
    

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

    Ok,因此它在单独的线程上并行运行,但调用阻塞。谢谢澄清!很抱歉拿走了“已接受的答案”,我尝试了两次发送,但在我尝试的大多数执行中,状态机甚至没有接收到第二个事件。有什么想法吗?Python2.7,Win7 64位,PySCXML 0.8.3。哦,我注意到你是PySCXML——很棒的东西!我在您的存储库中创建了一个问题,因为我猜这是错误行为: