打开多个连接时保留挂起
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 实例。
我启动 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 实例。