如何使用参数重启Erlang监督功能?

时间:2016-01-22 20:46:29

标签: erlang supervisor

我正在学习Erlang,并有一个主管问题......

我有一个需要3个参数的函数(字符串,字符串,数字)。我想监督它,并确保如果它失败,它会通过我传递的3个参数重新启动。

这是主管可以处理的事情,还是我需要研究其他一些概念?

感谢。

2016年1月23日更新

我想提一件事......我有一份1439个条目的清单。我需要为该列表中的每个条目创建一个Supervisor。每个条目都会产生不同的论点。例如,这里有一些伪代码(让人联想到Ruby):

(360..1799).each do |index|
  export(output_path, table_name, index) # Supervise this
end

这是由运行时的用户交互触发的。 output_pathtable_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/"temp1234361重新启动它。

这是我可以与主管做的事吗?

2 个答案:

答案 0 :(得分:1)

是的,这是supervisor所做的,但你的意思是"参数",而不是"参数"。

对于普通(非simple_one_for_one)管理程序,init / 1实现返回所谓的子规范列表,每个子规范都指定将生成的子项,并且将传递的参数作为此子规范的一部分提供

对于simple_one_for_one主管,您仍然需要提供子规范,但是在启动每个受监督的子项时提供参数。

在所有情况下,您的受监督儿童将使用相同的参数重新启动。

答案 1 :(得分:0)

一般概念

  • Erlang系统分为模块
  • 每个模块由功能组成。
  • 工作由进程完成,他们使用函数来完成。
  • 主管是一个监督其他流程的流程。

因此,您的功能肯定会在流程中执行,您可以由主管指定和监督该流程。这样,当您的函数失败并崩溃时,执行它的进程也会崩溃。当进程崩溃时,其主管将发现并可以根据预定义的重启策略对其进行操作。这些策略可以是one_for_oneone_for_allrest_for_one

您可以查看其manual以获取更多选项。