有一个模块/功能mymodule ,如何在主管行为下多次启动它?
例如,我需要同时启动同一进程(mymodule)的 2 个实例。我将孩子标识符称为child1和child2。它们都指向我要启动的mymodule模块。我已经指定了两个不同的函数来启动工作进程“mymodule”的每个实例( start_link1 和 start_link2 )
-module(my_supervisor).
-behaviour(supervisor).
-export([start_link/0, init/1]).
start_link() ->
supervisor:start_link({local, ?MODULE}, ?MODULE, _Arg = []).
init([]) ->
{ok, {{one_for_one, 10, 10},
[{child1,
{mymodule, start_link1, []},
permanent,
10000,
worker,
[mymodule]}
,
{child2,
{mymodule, start_link2, []},
permanent,
10000,
worker,
[mymodule]}
]}}.
worker有两个不同的start_link 函数( start_link1 和 start_link2 )用于测试目的:
-module(mymodule).
-behaviour(gen_server).
start_link1() ->
log_something("at link 1"),
gen_server:start_link({global, child1}, ?MODULE, [], []).
start_link2() ->
log_something("at link 2"),
gen_server:start_link({global, child2}, ?MODULE, [], []).
init([]) ->
....
有了上面的内容,我可以在我的日志中看到“在链接 1”的消息,但它确实在任何地方显示“在链接 2”。它在 link1 的实例中也没有执行任何操作:只是明显地死了。
唯一可行的情况是名称“child1”与工作模块名称“mymodule”匹配时。