打开多个连接时保留挂起

Rserve hangs when oppening multiple connections

我启动 Rserve:

C:\Program Files\R\R-3.5.0\bin\x64> "C:\Users\XXXX\DOCUME~1\R\WIN-LI~1.5\Rserve\libs\x64\Rserve.exe" --RS-port 1000

运行 以下 java 代码:

import org.rosuda.REngine.REXPMismatchException;
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.Rserve.RserveException;

public class TestR {
    private  RConnection con;
    private  RConnection con2;
    public TestR(){
        try {
            con = new RConnection();
            con2 = new RConnection();
        } catch (RserveException e) {
            e.printStackTrace();
        }
    }
    public Double test(){
        try {

            double d = con.eval("1+1").asDouble();
            double c = con2.eval("1+1").asDouble();
            return d+c;
        } catch (RserveException | REXPMismatchException e) {
            return (double)(-1);
        }
    }
}

我在 JUnit 上创建了以下 class 来测试它:

import org.junit.Test;

import static org.junit.Assert.*;

public class TestRTest {

    @Test
    public void test(){
        TestR t = new TestR();
        t.test();
    }

}

当我 运行 这个测试时,它在实例化连接时停止,它创建了第一个,但在第二个上挂起。知道为什么会这样吗?

还行

还行

挂起

您的问题可能与多线程问题有关。

Unix:没问题,一个 Rserve 实例可以服务多个调用。

Windows: Rserve 无法通过派生当前进程来创建单独的进程。 --> 为每个线程创建一个新的Rserve进程(监听不同的端口),也必须在相应的端口上建立一个新的Rserve连接。

RConnection connection = new RConnection(HOST, PORT);

如果您需要更多信息,请随时询问。如果您愿意,我还可以提供完整的 class 代码,用于使用 Rserve 创建多个 R 实例。

看到这个 Java class 我曾经 运行 几个带有 Rserve 的 R 实例。