Erlang:从另一个模块生成一个函数的进程
Erlang: spawn a process to a function from another module
我这周开始使用这种编程语言,我正在尝试为我大学的一个科目做一个非常简单的网络服务器。我在生成进程时有一个问题。我需要生成 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 模块上的一个函数,但我在每次生成时都收到此错误:
=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 文档所说,我能得到一些帮助吗?
感谢您的宝贵时间!
好的,我自己解决了。当我生成一个新进程时,我传递给它的参数少于我尝试生成的函数的参数。
我这周开始使用这种编程语言,我正在尝试为我大学的一个科目做一个非常简单的网络服务器。我在生成进程时有一个问题。我需要生成 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 模块上的一个函数,但我在每次生成时都收到此错误:
=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 文档所说,我能得到一些帮助吗?
感谢您的宝贵时间!
好的,我自己解决了。当我生成一个新进程时,我传递给它的参数少于我尝试生成的函数的参数。