使用supervisor为每个节点启动elixir子进程



我正在尝试输入节点的数量,并为每个节点启动genserver进程;即每个CCD_ 1(其中n是节点号(针对每个进程启动单独的进程(PID(。

pids = Enum.map(1..totalnodes, fn n ->
{:ok, unit} = GenSerModule.start_link(n)
unit
end)

pid从此行返回(#<12.2.2.1>#<12.2.2.2>等(。

现在我想启动Supervisor下的节点。也就是说,我必须通过Supervisor的init函数为每个节点启动genserver进程,并获取PID。大概是这样的:(我知道这是错误的(

pids = Enum.map(1..totalNodes, fn n ->
{:ok, unit} = worker(GenServerModule, n)
unit
end)
Supervisor.init(nodeMap,[strategy: :one_for_one])

我想在这个函数中获得启动的子进程的PID,我通过Supervisor启动子进程。我被困在这里了。

我该怎么做?

Supervisor.Spec.worker/3,除了不推荐使用之外,它不执行任何操作,而是返回一个childspec元组。

当需要在监督下动态启动工人时,他们通常使用DynamicSupervisor

但是,如果你所说的节点是指远程节点,那么就不可能监督远程进程,因为(除了许多其他问题之外(它违反了容错性(虚拟机无法确保另一个虚拟机一直在运行(

最新更新