6

R をevalマルチスレッドで実行する必要がありますが、これはRserve非常にうまく機能します。ただし、1 つのインスタンスの評価に時間がかかりすぎる場合は、ブロッキング評価を計算しているインスタンスをシャットダウンできる必要があります。私がテストした限りでは、指定されたインスタンスは、評価が完了するまでシャットダウンを拒否します (明らかに、再度リッスンする前に結果を取得する必要があります)。だからここに私の質問があります:

Processブロッキング インスタンス (オブジェクトのようなもの) で Java ハンドルを取得する方法はありますprocess.destroy()か? つまり、eval を要求する (接続を作成し、コマンドをスローする) 場合、処理中の eval とそれに関連する Rsere のインスタンスとの間の関係を Java 経由で確立するにはどうすればよいでしょうか?

それとも、すでにこの種のニーズに対処できるようになっている Rserve について何か見逃していましたか?

注:serverEval()メイン インスタンスで計算を実行する通常の の代わりに、すべて (すべての eval) を実行しようとしましevalたが、もちろん、これは 1 つのプロセス (メイン プロセス) しか使用しないため満足のいくものではありません。それは私が殺すことができますが、私の主な目標は、個々のインスタンスで実行されているブロッキング評価を個別にシャットダウンできるようにすることでした。そして、当然ながら、私の 8 つの CPU コアの利点を維持します。つまり、並列処理を維持します。それ以外の場合、Rserve を使用する意味はありません (この場合、JRI エンジンで十分です)。

注:この種のもの(スレッド)を避けたいと思います。メインサーバー自体の複数のインスタンスを異なるポートで処理します。それはオプションではありません。

Rserve のメーリング リストで情報を取得しようとしましたが、回答がありません。ここで回答や役立つコメントを得るのに十分なほど明確になったことを願っています。そうでない場合は、詳細をお尋ねください。よろしくお願いします。

編集:必要な数の R のインスタンスを処理するRCallerもテストしましたが、後で Java 側から解析するために XML ファイルに結果を書き込んでいるため (実際には Rserve のように通信プロトコルを使用していません)、それは遠すぎます。私が実行しなければならないことに対して遅い...

4

2 に答える 2

1

どうですか

rcon.eval("system(\"echo $$\", intern = TRUE)");

実行中のRserve(メインではない)のpidを返し、このpidを使用して強制終了できます。

于 2016-04-19T02:54:40.643 に答える