我想建立一个统计机器,这样它就可以同时拥有层次机器和异步机器的特性。我尝试了这段代码,但是层次机器和异步机器不能同时工作。
`
from transitions.extensions.markup import MarkupMachine
from transitions.extensions.factory import HierarchicalMachine
from transitions.extensions.asyncio import AsyncMachine
QUEUED = False
class Unhealthy(HierarchicalMachine, AsyncMachine):
def __init__(self):
states = [{"name":'aborted', "on_enter":[]},
{"name":'clearancetimeouterr', "on_enter":[]},
{"name":"awaitingclearanceerr", 'on_enter':[]},
{"name":"cleared", 'on_enter':[]}
]
transitions = [{"trigger":"abort", "source":"aborted", "dest":"awaitingclearanceerr"},
{"trigger":"awaitingclearanceerr", "source":"clearancetimeout", "dest":"awaitingclearanceerr"},
{"trigger":"cleared", "source":"awaitingclearanceerr", "dest":"cleared"}]
super().__init__(states=states, transitions=transitions, initial="awaitingclearanceerr", queued=QUEUED)
class Healthy(HierarchicalMachine, AsyncMachine):
def __init__(self):
unhealthy = Unhealthy()
states = [{"name":'idle', 'on_enter':[]},
{"name":"busy", 'on_enter':[]},
{"name":"done", 'on_enter':[]}]
transitions = [{'trigger':'start', 'source':'idle', 'dest':'busy'},
{"trigger":"done", "source":"busy", "dest":"done"},
{"trigger":"idle", "source":"awaiting_clearance", "dest":"idle"}]
super().__init__(states=states, transitions=transitions, initial="idle", queued=QUEUED)
class StateMachine(HierarchicalMachine, MarkupMachine, AsyncMachine):
def __init__(self):
unhealthy= Unhealthy()
healthy = Healthy()
states = [{'name':"idle"}, {"name":'healthy', 'children':healthy}, {"name":"unhealthy", "children":unhealthy}]
super().__init__(states=states, initial="idle", queued=QUEUED)
self.add_transition("start_machine", "idle", "healthy")
self.add_transition('abort', 'healthy', 'unhealthy')
I want something like that but HierarchicalMachine and AsyncMachine are not working together. And giving the following error:
运行时错误:AsyncMachine不应调用Machine._process
请改用Machine._process_async
'
1条答案
按热度按时间nzk0hqpo1#
transitions
文档的扩展部分提到了以下内容:有两种机制来检索启用了所需特性的状态机示例。第一种方法利用便利工厂,如果需要该特性,则将四个参数graph、nested、locked或asyncio设置为
True
。这种方法的目标是实验性使用,因为在这种情况下,底层类不必是已知的。然而,类也可以直接从
transitions.extensions
导入。命名方案如下:| | 图表|巢状|已锁定|阿森西奥|
| - -|- -|- -|- -|- -|
| 机器|✘| ✘| ✘| ✘|
| 图形机|✓| ✘| ✘| ✘|
| 分层计算机|✘| ✓| ✘| ✘|
| 已锁定计算机|✘| ✘| ✓| ✘|
| 分层图形机|✓| ✓| ✘| ✘|
| 锁定图形机|✓| ✘| ✓| ✘|
| 锁定的分层计算机|✘| ✓| ✓| ✘|
| 锁定的分层图形计算机|✓| ✓| ✓| ✘|
| 异步计算机|✘| ✘| ✘| ✓|
| 异步图形机|✓| ✘| ✘| ✓|
| 分层异步计算机|✘| ✓| ✘| ✓|
| 分层异步图形机|✓| ✓| ✘| ✓|
所以我猜这就是你要找的:
如果你想“混合”你自己的机器类,看看factory.py,了解子类是如何定义的。注意继承的顺序。混合可能会导致不希望的效果。