带有gevent的fsm及其自己的(无限)调用

2024-09-27 21:32:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

“greenlet”是一个小型的独立伪线程。把它看作一小堆帧;最外层(底部)的帧是您调用的初始函数,最内层的帧是greenlet当前暂停的帧。您可以通过创建许多这样的堆栈并在它们之间跳转执行来使用greenlet。跳转从来不是隐式的:一个greenlet必须选择跳转到另一个greenlet,这将导致前者暂停,后者恢复到它被暂停的位置。在绿叶之间跳跃被称为“切换”

我知道我需要改变状态,我可以有一个FSM,如图所示: from a post I was reading

在这种情况下,如何确保不会发生堆栈溢出? 既然greenlet只给了我一小堆框架,我对使用它持怀疑态度。你知道吗

有没有一个fsm设计范例需要遵循,这可以帮助我们回到早期的堆栈帧?你知道吗

短暂性脑缺血发作


Tags: 函数httpsorg定义堆栈readthedocs线程greenlet
1条回答
网友
1楼 · 发布于 2024-09-27 21:32:40

我读了更多关于这个问题的内容,似乎我应该使用Exception并尝试..Exception,这不会导致另一个函数调用,从而避免stackoverflow。 发件人:https://docs.python.org/2/faq/design.html

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

为什么没有goto?你知道吗

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

例如:

类标签:pass#declare a label

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

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

相关问题 更多 >

    热门问题