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