【发布时间】:2017-02-21 15:21:55
【问题描述】:
这是一个简单的测试主管:
defmodule SupervisorTest.Worker.Supervisor do
use Supervisor
def start_link do
Supervisor.start_link(__MODULE__, :ok, name: __MODULE__)
end
def start_worker(args) do
Supervisor.start_child(__MODULE__, [args])
end
def init(:ok) do
children = [
worker(SupervisorTest.Worker, [])
]
supervise(children, strategy: :simple_one_for_one)
end
end
这是我更简单的工人:
defmodule SupervisorTest.Worker do
use GenServer
def start_link(args) do
GenServer.start_link(__MODULE__, args)
end
def state(pid) do
GenServer.call(pid, :state)
end
def stop(pid) do
GenServer.stop(pid, :normal)
end
def handle_call(:state, _from, state) do
{:reply, state, state}
end
end
理想情况下,我希望能够使用该主管调用Supervisor.which_children 并获取子元组列表,其中 ID 是生成的 UUID。看起来我无法在 init worker 语句中设置它。并且没有start_child/3 可以选择。而且我不能用另一个worker 语句的输出调用start_child/2...所以我看不到任何方法可以将ID 设置为...有什么想法吗?
这段代码写的,当我调用Supervisor.which_children时,每个子元组的第一个元素是:undefined。
【问题讨论】:
标签: elixir erlang-otp