首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有gevent的fsm和它自己的(无限)调用堆栈

带有gevent的fsm和它自己的(无限)调用堆栈
EN

Stack Overflow用户
提问于 2015-03-08 14:46:59
回答 1查看 148关注 0票数 0

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

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

“greenlet”是一个小的独立伪线程。可以把它看作是一小堆帧;最外面(底部)的帧是你调用的初始函数,最里面的帧是当前暂停了greenlet的那个帧。你可以通过创建许多这样的堆栈并在它们之间跳转来处理greenlet。跳转从来不是隐式的:一个greenlet必须选择跳到另一个greenlet,这会导致前者暂停,而后者从暂停的地方恢复。在greenlet之间跳转称为“切换”。

我知道我需要更改状态,并且我可以拥有如下图所示的FSM:

如何确保在这种情况下不会命中堆栈溢出?因为greenlet只给了我“一小堆框架”,所以我对使用它持怀疑态度。

这里有没有需要遵循的fsm设计范例,它可以帮助我们回到早期的堆栈框架?

提亚

EN

回答 1

Stack Overflow用户

发布于 2015-03-08 18:02:43

我在这个问题上读了更多,似乎我应该使用Exception和try..except,这将不会导致另一个函数调用,从而避免堆栈溢出。来自:https://docs.python.org/2/faq/design.html

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

为什么没有goto?

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

例如:

class label: pass #声明一个标签

代码语言:javascript
运行
复制
try:
     ...
     if condition: raise label()  # goto label
     ...
except label:  # where to goto
     pass

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28923867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档