我有一个gen_server模块,它做了一些定期工作:从数据库中读取,写入另一个并休眠。我想缩放它并启动服务器的多个实例。我是通过以下方式完成的:
def children_spec do
0..@workers_number - 1
|> Enum.map(
fn (i) ->
process_name = String.to_atom("#{__MODULE__}.#{i}")
Supervisor.child_spec({__MODULE__, name: process_name}, id: {__MODULE__, i})
end
)
end
该模块具有children_spec函数,该函数返回将添加到顶级应用程序主管列表中的子规范列表:
children = children ++ MyWorkerModule.children_spec()
Supervisor.init(children, strategy: :one_for_one)
还有其他办法吗?另外,我想到了模块的附加主管:simple_one_for_one策略