【发布时间】:2016-11-23 19:24:20
【问题描述】:
我正在使用库RserveCLI2 构建一个连接到Linux 机器上的Rserve 的ASP.Net 应用程序。
我做了一个测试,我增加了 R 脚本的运行时间,看看它是否会成功完成。下面是我的代码。
try
{
using (var rConnection = RserveCLI2.RConnection.Connect(_host, _port, _credentials))
{
rConnection.Assign("job.id", new SexpArrayInt(jobId));
rConnection.Eval($"try(source(\"script.R\"), silent=T)");
string errMessage = rConnection.Eval("geterrmessage()").ToString();
if (errMessage == "")
{ success = true; }
else
{ success = false; }
}
}
catch (Exception e)
{ success = false; }
return success;
还有 R 脚本:
test.start <- Sys.time()
test.duration <- (1.2 ^ (job.id)) * 10 # in seconds.
test.i <- 0
while(as.numeric(difftime(Sys.time(), test.start), units="secs") < test.duration) {
test.i <- test.i + 1
}
job.id 是从 Rserve 传递的,每次迭代都会增加 1,从而有效地将每次迭代的持续时间增加 20%。 5 次迭代同时运行,每次都从一个单独的线程开始。
我发现最后完成的作业持续了大约 1 小时 40 分钟。当我停止测试时,以下作业未在超过 36 小时内完成。没有开始新的工作。
如果我解释正确,Eval 方法就永远不会返回。在 e Rserve 服务器上,我看到在测试的前几个小时看到的 5 个 Rserve 进程中只剩下 2 个。
什么可能导致这种行为,RserceCLI2 不应该返回错误吗?
【问题讨论】:
标签: rserve