【问题标题】:multiple children for a supervisor主管的多个孩子
【发布时间】:2016-10-25 17:10:11
【问题描述】:

我完全是 elixir 的初学者,然后我尝试(受到编程 elixir 书籍示例的启发)创建一个 可以拥有多个相同类型的孩子的主管。我得到了错误

{:error, {{:EXIT, {{:badmatch, {:error,  {:already_started,#PID<0.122.0>}}},...

可能我误解了supervisor的用法,不得不为每个进程创建一个supervisor。

谁能解释一下在这种情况下主管的正确用法?

【问题讨论】:

  • 您能否也包括您尝试过的引发该错误的代码?
  • 还可以查看simple_one_for_one 类型的主管,他们可以定义一个孩子,但动态生成几个。

标签: erlang elixir erlang-otp


【解决方案1】:

(我不做Elixir,所以这都是用Erlang语法)

创建一个可以拥有多个相同类型子级的主管

主管不关心孩子的“类型”(在您使用它的意义上)。子规范包含一个id、一个start 函数以及一些与您的问题无关的其他内容。

如果id不同,您可以对多个孩子使用相同的start函数。

我怀疑您遇到困难的地方是您的孩子有一个名字。也就是说:在你的init 函数中,你调用了gen_server:start_link/4,传递了{local, ?MODULE} 之类的东西。这些进程都尝试使用相同的名称进行注册,因此您会收到already_started 错误。

【讨论】:

  • 你是对的,我试图覆盖工人创建中似乎不起作用的名称。非常感谢:)
猜你喜欢
  • 2016-07-11
  • 2014-06-17
  • 2016-06-11
  • 2019-03-08
  • 1970-01-01
  • 2012-06-22
  • 2017-05-02
  • 2012-11-11
  • 2014-12-09
相关资源
最近更新 更多