1

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

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

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

谢谢。

2016 年 1 月 23 日更新

我想提一件事......我有一个包含 1439 个条目的列表。我需要为该列表中的每个条目创建一个主管。每个条目都会产生不同的参数。例如,这里有一些伪代码(让人想起 Ruby):

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

这是由运行时的用户交互触发的。output_pathand也是动态的table_name,但对于给定的批次不会改变。展开后,运行可能看起来像这样:

出口(“/输出/2016-01-23/”,“temp1234”,360)
出口(“/输出/2016-01-23/”,“temp1234”,361)
出口(“/输出/2016-01-23/”,“temp1234”,362)
.
.

因此,如果 361 失败,我需要使用 、 和 重新"/output/2016-01-23/"启动temp1234361

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

4

2 回答 2

1

是的,这就是这样supervisor做的,但您的意思是“参数”,而不是“参数”。

对于普通(不是 simple_one_for_one)监督者,您的 init/1 实现返回一个所谓的子规范列表,每个子规范都指定将产生的子规范,并且将传递的参数作为该子规范的一部分提供。

使用 simple_one_for_one 监督者,您仍然必须提供子规范,但您在启动每个监督子时提供参数。

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

于 2016-01-23T10:16:53.500 回答
0

一般概念

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

所以你的函数肯定会在一个进程中执行,你可以指定和监督这个进程。这样,当您的函数失败并崩溃时,正在执行它的进程也会崩溃。当进程崩溃时,它的主管会发现并根据预定义的重启策略对其采取行动。这些策略可能one_for_oneone_for_allrest_for_one

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

于 2016-01-23T08:41:41.343 回答