python - erlang 使用 erlport 生成 python 实例时出现 erlang 错误

标签 python concurrency parallel-processing erlang runtime-error

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

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

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

当我尝试创建 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.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

最佳答案

每个生成的端口都需要一些管道进行通信。每个管道都使用文件描述符(其中两个,但一个很快关闭)并且可以打开多少文件描述符是有限制的。最大打开文件描述符的数量由带下划线的操作系统设置(请参阅 POSIX.1-2001 中定义的 ulimit 系统调用或类 unix 系统的 shell 命令的 ulimit)。

关于python - erlang 使用 erlport 生成 python 实例时出现 erlang 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32144754/

相关文章:

javascript - 使用 selenium python 网页抓取获取向下滚动网页的 html 源代码

Python最准确测量时间(毫秒)的方法

java - 来自 Callable 的 CompletableFuture?

c++ - 线程构建 block 与 MPI,哪个更适合 mt 需要?

c# - 并行.For() : Update variable outside of loop

python - 使用 Selenium 和 Beautifulsoup 解析 Airdna map 悬停在文本上

python - 查找与 +10.000 个其他具有相似特征的图像最接近的匹配

java - JProgressBar setValue 不起作用,也尝试使用 SwingUtilities

java - 为什么 java.util.concurrent.ArrayBlockingQueue 在调用 await() 时使用 'while' 循环而不是 'if'?

parallel-processing - 并行化 - 为什么 sleep 只暂停一次?