我正在学习Erlang,并有一个主管问题......
我有一个需要3个参数的函数(字符串,字符串,数字)。我想监督它,并确保如果它失败,它会通过我传递的3个参数重新启动。
这是主管可以处理的事情,还是我需要研究其他一些概念?
感谢。
2016年1月23日更新
我想提一件事......我有一份1439个条目的清单。我需要为该列表中的每个条目创建一个Supervisor。每个条目都会产生不同的论点。例如,这里有一些伪代码(让人联想到Ruby):
(360..1799).each do |index|
export(output_path, table_name, index) # Supervise this
end
这是由运行时的用户交互触发的。 output_path
和table_name
也是动态的,但对于给定的批次不会发生变化。解开,跑步可能看起来像这样:
export("/output/2016-01-23/", "temp1234", 360) export("/output/2016-01-23/", "temp1234", 361) export("/output/2016-01-23/", "temp1234", 362) . .
因此,如果361失败,我需要使用"/output/2016-01-23/"
,temp1234
和361
重新启动它。
这是我可以与主管做的事吗?
答案 0 :(得分:1)
是的,这是supervisor
所做的,但你的意思是"参数",而不是"参数"。
对于普通(非simple_one_for_one)管理程序,init / 1实现返回所谓的子规范列表,每个子规范都指定将生成的子项,并且将传递的参数作为此子规范的一部分提供
对于simple_one_for_one主管,您仍然需要提供子规范,但是在启动每个受监督的子项时提供参数。
在所有情况下,您的受监督儿童将使用相同的参数重新启动。
答案 1 :(得分:0)
因此,您的功能肯定会在流程中执行,您可以由主管指定和监督该流程。这样,当您的函数失败并崩溃时,执行它的进程也会崩溃。当进程崩溃时,其主管将发现并可以根据预定义的重启策略对其进行操作。这些策略可以是one_for_one
,one_for_all
和rest_for_one
。
您可以查看其manual以获取更多选项。