我是elixir的初学者,然后我尝试(灵感来自编程elixir书的例子)来创建一个主管,可以有几个相同类型的孩子。我收到了错误
{:error, {{:EXIT, {{:badmatch, {:error, {:already_started,#PID<0.122.0>}}},...
也许我误解了主管的使用,并且必须为每个流程创建一个主管。
在这种情况下,有人能解释一下主管的正确用法吗?
答案 0 :(得分:7)
(我不做Elixir,所以这都使用Erlang语法)
创建一个可以拥有多个相同类型子项的主管
主管不关心孩子们的“类型”(在某种意义上说,你正在使用它)。子规范包含id
,start
函数以及与您的问题无关的一些其他内容。
如果id
不同,您可以为多个孩子使用相同的start
功能。
我怀疑你遇到困难的地方是你的孩子有名字。也就是说:在init
函数中,您调用gen_server:start_link/4
,传递{local, ?MODULE}
之类的内容。这些进程都尝试使用相同的名称进行注册,因此您会收到already_started
错误。