【发布时间】:2015-03-08 06:46:58
【问题描述】:
我想知道如何在 python 中使用 greenlet 定义具有循环的有限状态机而不会导致 stckoverflow。
来自https://greenlet.readthedocs.org/en/latest/:
“一个“greenlet”是一个小的独立伪线程。把它想象成一小堆框架;最外层(底部)框架是你调用的初始函数,最内层是greenlet所在的框架当前已暂停。您可以通过创建许多这样的堆栈并在它们之间跳转执行来使用greenlet。跳转绝不是隐式的:一个greenlet必须选择跳转到另一个greenlet,这将导致前者暂停而后者在它所在的位置恢复被暂停了。在greenlets之间跳转称为“切换”。”
我知道我需要更改状态,并且我可以拥有如图所示的 FSM:
如何确保在这种情况下不会发生堆栈溢出? 由于 greenlet 只给了我“一小堆帧”,我对使用它持怀疑态度。
这里是否有需要遵循的 fsm 设计范式可以帮助回到早期的堆栈帧?
TIA
【问题讨论】:
标签: python gevent automata greenlets