0

R でモデルをトレーニングし、 renjinを使用してサーブレットで予測を計算したいと考えています。予測は常に同じ一意のモデルを使用しています。

renjin をインスタンス化してリクエストごとに同じモデルをロードするのにリソースを費やすのを避けるために、サーブコンテナが (ServletContextListener で) 起動するときに、シングルトン オブジェクトで renjin をインスタンス化してモデルを 1 回ロードすることを検討しています。

私の質問は次のとおりです。そのように処理することはスレッドセーフですか?(同じインスタンスにロードされた同じモデルを使用して)複数の予測リクエストが同時に行われる場合、renjin はどのように機能しますか? これを行う正しい方法は何ですか: renjin インスタンスにロックを使用して、スレッドセーフに保つ必要がありますか? または代わりにスレッドのプールを作成しますか?

4

1 に答える 1

0

複数のスクリプトを同時に評価するために、単一の Renjin セッションを使用しないでください。

ScriptEngineただし、Renjinオブジェクトのプールを維持することも、 RenjinServletThreadLocalの例で行ったように、スレッドごとに 1 つを維持するために使用することもできます。

ScriptEngine高レベルの同時リクエストが予想されない場合は、単一インスタンスへのアクセスを同期することもできます。

ただし、データはセッションで共有できるため、メモリが問題になる場合は、最初にクラスパスからモデルをロードするかWEB-INF、各ScriptEngineインスタンスと共有することができます。

于 2016-04-22T13:29:33.273 に答える