Erlang:从另一个模块向一个函数生成一个进程

时间:2015-03-24 00:59:31

标签: module erlang spawn

本周我开始使用这种编程语言,并且我正在尝试为我的大学的主题做一个非常简单的Web服务器。当我产生一个过程时,我有一个问题。我需要生成N进程,所以我在我的模块dispatcher.erl中创建了一个函数:

create_workers(NWorkers, Servers, Manager, Dispatcher_Pid) ->
case NWorkers of
    0 -> Servers;
    _ when NWorkers > 0 ->
        Process_Pid = spawn(server, start, [Manager]),
        create_workers((NWorkers - 1), lists:append(Servers, [{server, Process_Pid}]), Manager, Dispatcher_Pid)
end.

我尝试调用的函数位于另一个模块(server.erl)中,该模块包含以下代码:

start(Manager, Dispatcher_Pid) ->
receive
    {request, Url, Id, WWW_Root} ->
        case file:read_file((WWW_Root ++ Url)) of
            {ok, Msg} ->
                conn_manager:reply(Manager, {ok, binary:bin_to_list(Msg)}, Id);
            {error, _} ->
                conn_manager:reply(Manager, not_found, Id)
        end
end,
Dispatcher_Pid ! {done, self()},
start(Manager, Dispatcher_Pid).

所以,我试图将一个进程从dispatcher.erl模块生成到server.erl模块上的一个函数,但是我在每个spawn上都会出现这个错误:

=ERROR REPORT==== 24-Mar-2015::01:42:43 === 
Error in process <0.165.0> with exit value: {undef,[{server,start,[<0.159.0>],[]}]}

我不知道这里发生了什么,因为我认为我正在调用spawn函数,正如Erlang文档所说,我可以得到一些帮助吗?

谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

好的,我是自己解决的。当我生成一个新进程时,我传递的参数少于我尝试生成的函数的arity。