0

我想知道如何定义一个有限状态机,它在 python 中使用 greenlet 循环而不会导致 stckoverflow。

来自https://greenlet.readthedocs.org/en/latest/

“一个‘greenlet’是一个小的独立伪线程。把它想象成一小堆帧;最外面(底部)的帧是你调用的初始函数,最里面的帧是greenlet当前暂停的那个. 你通过创建许多这样的堆栈并在它们之间跳转执行来使用greenlet。跳转绝不是隐含的:一个greenlet 必须选择跳转到另一个greenlet,这将导致前者暂停,而后者从暂停的地方恢复。在greenlets之间跳跃被称为“切换”。”

我知道我需要更改状态,并且我可以拥有如图所示的 FSM: 从我正在阅读的一篇文章中

在这种情况下,如何确保不会发生堆栈溢出?由于 greenlet 只给了我“一小堆框架”,我对使用它持怀疑态度。

这里是否需要遵循 fsm 设计范式来帮助回到早期的堆栈框架?

TIA

4

1 回答 1

0

我阅读了更多关于这个问题的内容,似乎我应该使用 Exception 和 try..except,这不会导致另一个函数调用,因此避免了 stackoverflow。来自:https ://docs.python.org/2/faq/design.html

=================================

为什么没有goto?

您可以使用异常来提供甚至可以跨函数调用工作的“结构化 goto”。许多人认为异常可以方便地模拟 C、Fortran 和其他语言的“go”或“goto”结构的所有合理使用。

例如:

class label: pass # 声明一个标签

try:
     ...
     if condition: raise label()  # goto label
     ...
except label:  # where to goto
     pass

==========================================

于 2015-03-08T10:02:43.473 回答