使用erlang生成python实例时发生erlang错误,使用erlp

2024-10-03 15:27:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图计算出我可以从erlang创建多少个python实例/进程。在

我成功地创建了500个实例。 当所有进程被创建时,cpu接近0%。在

1个python实例占用6.2MB的ram。 400个python实例占用2.4gb的ram。 500个python实例占用3.1gb的ram。在

当我试图创建600个python实例时,出现了以下错误:

/usr/lib/erlang/erts-7.0/bin/child_setup: error while loading shared libraries: libc.so.6: cannot open shared object file: Error 24 ** exception error: no match of right hand side value {error, {invalid_python,"/usr/bin/python"}} in function spawn_python:spawn_python/2 (spawn_python.erl, line 10)

理论上我需要6.2MB*600=3.7GB的免费内存(我有)。在

这是我使用的代码。 它需要端口: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). ERROR here

%%%%%%%% 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.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Tags: 实例bin进程usrerrormbramshared
1条回答
网友
1楼 · 发布于 2024-10-03 15:27:10

每个生成的端口都需要一些管道进行通信。每个管道都使用文件描述符(其中两个管道,但一个很快就会关闭),并且您可以打开的文件描述符数量是有限制的。打开的文件描述符的最大数量是通过在OS下面加下划线来设置的(请参见POSIX.1-2001中定义的ulimitsyscall或类unix系统的shell的ulimit命令)。在

相关问题 更多 >