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语句强制转换为变量。现在我明白了。泰,谢谢你。这就是我需要的。