我需要以原子方式启动多个主管子级。也就是说,如果组中的一个孩子在启动时失败,那么他们都不应该启动。
我将此操作视为一个函数:
start_children(SupRef, ChildSpecs)
ChildSpecs = List :: [child_spec()]
我应该如何以适当的方式实现这一点?任何示例,库等?我的直觉告诉我,从列表中启动所有孩子,检查他们是否都成功,然后杀死剩下的孩子不是办法。
或者也许我的设计有缺陷,我真的不需要做这些事情?
我需要以原子方式启动多个主管子级。也就是说,如果组中的一个孩子在启动时失败,那么他们都不应该启动。
我将此操作视为一个函数:
start_children(SupRef, ChildSpecs)
ChildSpecs = List :: [child_spec()]
我应该如何以适当的方式实现这一点?任何示例,库等?我的直觉告诉我,从列表中启动所有孩子,检查他们是否都成功,然后杀死剩下的孩子不是办法。
或者也许我的设计有缺陷,我真的不需要做这些事情?
OTP 的主管one_for_all
通过该策略为此提供支持。默认情况下,如果某个进程失败,所有进程都会重新启动,但您可以使用适合您目的的Restart
参数(例如temporary
)来更改此设置。