目前,我正在使用以下内容单独创建和注册流程:
register(name, spawn(fun() -> myfun())).
我想创建一个N个已注册Pid的列表,其名称如下:
pid1
pid2
pid3
.
.
.
pidN
有人可以推荐一种方法吗?
答案 0 :(得分:8)
如果要为同一个函数生成多个进程,可以使用列表推导并使用字符串的连接和list_to_atom/1
:
[register(list_to_atom("pid" ++ integer_to_list(X)), spawn(fun() -> myFun() end)) || X <- lists:seq(1,10)].
答案 1 :(得分:1)
您可以使用以下内容:
如果要在乘法进程中执行相同的函数并以不同的名称注册每个进程:
lists:foreach(
fun( Name ) ->
register( Name, spawn( fun() -> myfun() end ) )
end,
[ pid1, pid2, pid3 ] ).
或者如果您想在不同的进程中执行不同的功能:
lists:foreach(
fun( { Name, Func } ) ->
register( Name, spawn( fun() -> Func() end ) )
end,
[ { pid1, f1 }, { pid2, f2 }, { pid3, f3 } ] ).
(f1,f2,f3 - 是函数)
最后,如果你想在N个进程中执行相同的功能,你可以做下一个:
N = 20, %number of processes
lists:map(
fun( Num ) ->
register(
list_to_atom( "pid" ++ integer_to_list( Num ) ),
spawn( fun() -> myfun() end ) )
end,
lists:seq( 1, N ) ).