Erlang 如何从主进程接收多个进程
我有一个主要的过程,将收到三个过程的结果。每个派生的进程将返回一个元组,如Erlang 如何从主进程接收多个进程,erlang,Erlang,我有一个主要的过程,将收到三个过程的结果。每个派生的进程将返回一个元组,如{Pid,R}。我的目标是从三个进程中获得结果(3),并将它们保存在元组中,如{R1,R2,R3}。我不知道如何将结果像那样保存在元组中。下面是如何得到结果。有人能帮我从主进程返回元组吗?多谢各位 mainprocess(N)-> receive {Pid1,R1}-> R1, loop(); {Pid2,R2}->
{Pid,R}
。我的目标是从三个进程中获得结果(3),并将它们保存在元组中,如{R1,R2,R3}
。我不知道如何将结果像那样保存在元组中。下面是如何得到结果。有人能帮我从主进程返回元组吗?多谢各位
mainprocess(N)->
receive
{Pid1,R1}->
R1,
loop();
{Pid2,R2}->
R2,
loop();
{Pid3,R3}->
R3,
loop()
end.
最简单的解决方案是在单独的接收中等待每个进程,如下所示
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
并组合结果元组。您的问题中缺少许多信息,因此我做了一些假设:
你不介意信息的顺序
mainprocess函数仅用于收集其他3个函数的答案
产生流程和维持长期流程的责任超出了这个问题的范围
通过这些假设,您可以简单地收集mainprocess函数中3个不同变量的答案,并在最后构建元组:
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.
你的压痕破得很厉害。不要混合空格和制表符。你说的“每个生成过程将返回一个元组…”是什么意思?您是否知道他们必须将其作为消息发送到接收流程,而不是返回?谢谢。这解决了我的问题。我刚开始学习Erlang两周,所以有很多东西我需要学习。我不知道我们可以将receive语句强制转换为变量。现在我明白了。泰,谢谢你。这就是我需要的。