ライブラリ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が効果20%、各繰り返しの持続時間を増加させる反復ごとに一つだけインクリメントRserveから渡されます。同時に実行される5回の反復、それぞれ別々のスレッドから開始されます。
最後に完了したジョブは約1時間40分続いたことがわかりました。次のジョブは、テストを中止してから36時間以内に完了しませんでした。新しい仕事は始められていませんでした。
正しく解釈すると、Evalメソッドは返されませんでした。 e Rserveサーバーでは、テストの最初の時間帯に見たRserveプロセスが2つしかないことがわかりました。
この現象が発生する可能性があり、RserceCLI2がエラーを返してはいけませんか?