我正在构建一个使用库RserveCLI2在Linux计算机上连接到Rserve的ASP.Net应用程序。RServeCLI2是否支持长时间运行的任务?
我已经完成了一项测试,在该测试中,我增加了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传递一个递增的一个上的每个迭代中,由20%的有效地增加每一次迭代的持续时间。 5个迭代同时运行,每个迭代从一个单独的线程开始。
我发现完成的最后一项工作持续了大约1小时40分钟。当我停止测试时,以下作业在36小时内未完成。没有新的工作开始。
如果我正确解释它,Eval方法永远不会返回。在e Rserve服务器上,我看到只有2个Rserve进程保持了我在测试的第一个小时内看到的5个进程。
什么可能导致此行为,并且不应该RserceCLI2返回一个错误?