erlang生成python实例时的erlang错误,使用erlport

时间:2015-08-21 16:01:40

标签: python concurrency parallel-processing erlang runtime-error

我试着弄清楚我可以用erlang创建多少个python实例/进程。

我设法创建500个实例。 当创建所有进程时,cpu接近0%。

1个python实例需要6.2MB的内存。 400 python实例需要2.4 GB的ram。 500 python实例需要3.1 GB的内存。

当我尝试创建600 python实例时,我得到了这个错误:

  

/usr/lib/erlang/erts-7.0/bin/child_setup:加载共享时出错   libraries:libc.so.6:无法打开共享对象文件:错误24                                         **异常错误:右侧值不匹配{错误,                                                          {invalid_python “的/ usr /斌/蟒”}}        在函数spawn_python中:spawn_python / 2(spawn_python.erl,第10行)

理论上我需要6.2MB * 600 = 3.7 GB的免费ram(我得到了它们)。

这是我使用的代码。 它需要erlport:http://erlport.org/downloads/

%%我是如何测试的

  

spawn_python:spawn_python(100)。   spawn_python:spawn_python(100)。   spawn_python:spawn_python(100)。   spawn_python:spawn_python(100)。   spawn_python:spawn_python(100)。   spawn_python:spawn_python(100)。   错误在这里

%%%%%%%% spawn_python.erl  %%%%%%%%%%%%
-module(spawn_python).
-export([spawn_python/1, spawn_python/2]).

%% spawn N python process
spawn_python(N) -> spawn_python(N, []).

spawn_python(0, PyProcPids) ->
    PyProcPids;
spawn_python(N, PyProcPids) ->
    {ok, PyPid} = python:start(),
    PyProcPid = spawn(fun() -> python_loop(PyPid) end),
    io:format("Started Erlang/Python process -- PyProcPid: ~p~n", [PyProcPid]),
    spawn_python(N - 1, [PyProcPid | PyProcPids]).

python_loop(PyPid) ->
    receive
        {stop, From} ->
            python:stop(PyPid),
            From ! ok
    end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

1 个答案:

答案 0 :(得分:4)

每个衍生的端口都需要一些管道才能与之通信。每个管道都使用文件描述符(其中两个但很快就会关闭),并且可以打开多少文件描述符。最大打开文件描述符的数量通过强调操作系统来设置(参见POSIX.1-2001中定义的ulimit系统调用或类似系统的unix shell的ulimit命令)。