问题标签 [pytransitions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
63 浏览

python - 在 pytransitions 中处理多个对象

https://github.com/pytransitions/transitions

我正在尝试使用batman = NarcolepticSuperhero("Batman")文档中的示例。但是假设我们有 100 个蝙蝠侠要处理,我的方法是创建每个蝙蝠侠对象的列表,并使用循环单独跟踪它们的状态。IMO 这是非常幼稚的。

有人可以提出一些有效的解决方案。

谢谢

0 投票
2 回答
42 浏览

python - 如果转换无效,是否可以阻止触发器的执行?

当转换从当前状态无效时,触发方法似乎仍在运行,然后引发 MachineError 异常。有没有办法阻止触发器的执行,以便对模型上的触发器的调用只会引发异常而不执行触发器?

抱歉,忘记提及使用_checked_assignment常见问题解答中的覆盖,这可能是导致此行为的原因。

0 投票
1 回答
32 浏览

pytransitions - 如何从 PyTransitions FSM 生成输出?

我正在使用 PyTransitions 生成一个简单的 FSM,并使用 yml 文件对其进行配置。一个例子可能是这样的:

我的问题是,使用 yml 文件,我如何写入状态输出?例如,在状态 A 打开 LED 1,状态 B 打开 LED2,状态 C 打开 LED1 和 2。我在 PyTransitions 页面中找不到任何文档。

0 投票
0 回答
23 浏览

python - 如何在状态机中浏览状态时在全屏上显示不断更新的文本?

我是 python 和一般编程的新手,我正在尝试使用 Pytransitions 的状态机实现来构建算法。

我试图找到一种方法在连接到 RPi 4 Model B 的小型外部 LCD 屏幕上显示文本,同时让程序运行 3 个状态,每个状态显示不同的消息。

这是我尝试过的一个例子,我很确定给我带来麻烦的是 win.mainloop(),但我不知道如何解决它。根据我在阅读文档后的理解,我必须将它包含在代码的末尾以生成窗口本身,但是从状态到状态的转换时的文本更新仍然无法按我的预期工作 - 它们根本不显示完全没有。

这是简化的 3 状态系统的代码:

发生的情况如下:

屏幕显示“System Started” 1 秒,然后显示“Sensors calibrating”消息,同时每秒自我更新,总共 10 秒,然后显示“Sensors 已完全校准,请对传感器吹气”。

它绝不会打印任何附加到状态更改事件的字符串,即“请查看相机”或“面部和读数已授权”。

我该如何解决这个问题?

任何帮助将非常感激!

0 投票
1 回答
86 浏览

python - 更深的嵌套过渡

我正在尝试使用具有三个嵌套级别的分层机器,称为main -> nested -> deeper. 我希望状态机一个接一个地执行,然后将状态重新映射回第一台机器。所以我希望最终状态是done,但它是nested_deeper_working,所以很明显我错过了一些东西。

这里的解决方法是使用queued=False,然后按预期工作。但缺点是调用堆栈真的很长,并且在出现某些错误时的回溯很长。

抱歉,我无法将其缩短。在现实生活中,我使用MainMachine作为整体生产控制,它启动较小的机器来擦除、闪存、校准或测试设备。这些由 表示NestedMachine。这些机器内部是使用的最小的机器,例如。对于硬重置,一个测试序列,左右。这是DeeperMachine在这种情况下。

GenericMachine类只是一个抽象类。在这里,我定义了默认状态initial以及done基本配置。

MainMachine是层次结构中最高的机器,它启动NestedMachine. 预计在所有嵌套机器完成后,done执行状态。

NestedMachine充当第二层嵌套。它启动DeeperMachine并重新映射done状态。

第三层嵌套由DeeperMachine. 工作完成后,它触发go事件转换到状态并通过todone跳回NestedMachineMainMachine

测试实例化MainMachine并触发第一个事件。预计嵌套机器将被调用,并且在工作完成后,它将通过done状态重新映射,回到MainMachine.

0 投票
0 回答
31 浏览

python - 嵌套机器中的条件转换

我在嵌套机器中使用条件转换。不幸的是,条件方法无法访问类属性self._error。所以我必须将属性传递给触发方法。该解决方案有效,但我必须注意将正确的属性传递给触发方法。

我想使用另一种解决方案,它在没有传递参数的情况下工作,但我不知道是否可以使用 pytransitions 来实现它。

GenericMachine是定义基本状态和配置的抽象类。

MainMachine定义层次结构中的最高机器并实例化NestedMachine

魔法发生在这里NestedMachine。条件在error方法中得到解决。但是该方法只能看到self._error属性的初始值,所以initial状态的变化并没有体现出来。

测试用例预计在 结束nested_error,但nested_initial"go"事件未执行时结束

解决方法是将属性传递给触发函数,然后它按预期工作。

并且可能最好的解决方案是使用属性装饰器,而我error不仅可以将属性用于转换。

0 投票
0 回答
15 浏览

python - 有没有一种简单的方法来强制使用 pytransitions

我正在用 python 创建一个应用程序,它使用 pytransitions 作为有限状态机设计的基础。该应用程序必须在顺序单线程设计中为多达 700 个“客户端”提供服务,其中每个客户端都有自己的状态。我没有可用于通过 pickle 为所有 700 个客户端存储完整转储的存储空间,因此我想找到一种使用 pytransitions 的方法,其中我保存的只是所有事件处理后的 fsm 的最终状态。然后我将拥有一个 pytransitions fsm 的单个实例,但我需要能够将状态强制为“初始”以外的状态(显然我必须保存和恢复内部变量)。

我在 pytransitions api 中看不到任何明显的东西来做到这一点。我可以通过为每个实际状态设置一个带有“catchall”状态的“goto”转换处理程序来实现所需的效果,然后将其转换为所需的状态,但这似乎过于复杂。

请问有没有更简单的方法来强制使用pytransitions?

0 投票
0 回答
34 浏览

python - state 不是注册状态

我第一次使用 pytransitions 并遇到了这个问题,我正在尝试做一些状态并测试它

我正在尝试自己更改状态并收到此错误:ValueError:状态'size_selected'不是注册状态。

我跟进了文档对不起可能是愚蠢的问题

0 投票
0 回答
17 浏览

pytransitions - 如何将 aiologger 与 pytransitions 的 AsyncMachine 一起使用?

我正在使用 AsyncMachine 对多个异步交互的对象进行建模,原则上,一切都按预期工作,真的是一个很酷的扩展;-)

但是,当我使用日志记录时,在处理多个异步事件之间的日志条目中报告的毫秒延迟比我预期的要高,所以我想知道这是否是由于对例如 logger 的阻塞调用创建的日志记录输出。信息()。因此,我试图通过查看日志条目时间戳来获得的时间可能会因创建这些日志而被扭曲。

考虑到 aiologger 专门为 asyncio 实现了非阻塞日志记录,使用https://pypi.org/project/aiologger/似乎是一种合理的前进方式。

在快速查看 pytransitions 源代码之后,我想知道如果 pytransitions 本身仍然使用标准库中的日志记录模块而我的代码将使用 aiologger 提供的记录器会发生什么。我的猜测是,在这种情况下,只有我的代码创建的日志是非阻塞的,那么我怎样才能让 pytransitions 也使用 aiologger?

提前感谢您的帮助,

埃拉迪安

0 投票
0 回答
14 浏览

pytransitions - 如何编写正确的转换?

我有一个bot代码需要连接到状态机,如何正确实现,请帮帮我,理论上我明白怎么做,但在实践中,它不起作用

状态.py

(理论上,如果有人使用机器人,代码应该显示状态,但后来我想删除它)

完整代码