我有一个主流程,可以从三个流程中获得结果。每个衍生的进程都会返回一个像{Pid,R}
这样的元组。我的目标是从三个进程中获取结果(3)并将它们保存在像{R1,R2,R3}
这样的元组中。我不知道如何将结果保存在元组中。以下是如何获得结果。有人可以帮助我从主进程返回元组吗?谢谢。
mainprocess(N)->
receive
{Pid1,R1}->
R1,
loop();
{Pid2,R2}->
R2,
loop();
{Pid3,R3}->
R3,
loop()
end.
答案 0 :(得分:1)
最简单的解决方案是在单独的接收中等待每个进程,例如
main() ->
Pid1 = spawn(?MODULE, worker, [self(), 1]),
Pid2 = spawn(?MODULE, worker, [self(), 2]),
Pid3 = spawn(?MODULE, worker, [self(), 3]),
R1 = receive
{Pid1, N} ->
N
end,
R2 = receive
{Pid2, N2} ->
N2
end,
R3 = receive
{Pid3, N3} ->
N3
end,
{R1,R2,R3}.
这里首先等待第一个进程的结果。一旦收到它,它继续前进并等待第二个过程的结果,然后对第三个结果同样的事情。
无需递归调用main
并组合结果元组。
答案 1 :(得分:1)
您的问题中缺少许多信息,因此我做了一些假设:
你不介意信息的顺序,
mainprocess函数只用于收集其他3个答案,
产生流程和维持长期生存过程的责任超出了本问题的范围
通过这些假设,您可以简单地在3个不同的变量中收集mainprocess函数中的答案,并在最后构建元组:
main_process_init(N) ->
%% I don't know what is the usage of N in your example I just forward it to the loop
R1 = get_answer(),
R2 = get_answer(),
R3 = get_answer(),
main_process_loop(N,{R1,R2,R3}).
%% I suppose that when you got the answers you can enter in the main process loop
%% each message is received in a separate receive bloc
get_answer() ->
receive
{_,R} -> R %% you never use the information Pid, so don't care about its value
end.