2016-04-22 35 views
0

我已經在R中訓練了一個模型,並且想要使用renjin來計算Servlet中的預測。預測總是使用相同的獨特模型。爲了避免花費資源實例化renjin併爲每個請求加載相同的模型,我正考慮在servet容器啓動時(在ServletContextListener中)實例化renjin並在單例對象中加載模型一次。在servlet中使用renjin

我的問題是:是否線程安全地繼續這樣做?它是如何在人類同時完成多個預測請求(使用同一個實例中加載的相同模型)時與人類一起工作的?這樣做的正確方法是什麼:我應該使用鎖定renjin實例來保證線程安全嗎?或者創建一個線程池呢?

回答

0

不應該使用單個Renjin會話來同時評估多個腳本。

然而,您可以維護Renjin ScriptEngine對象池,或使用ThreadLocal來簡單地維護每個線程一個,就像我爲RenjinServlet示例所做的一樣。

如果您不期望高水平的併發請求,同步訪問單個ScriptEngine實例也可以工作。

的數據可以被共享會話,但是,因此,如果存儲器是一個問題,則可以 第一個從類路徑或WEB-INF加載模型,然後共享與每個ScriptEngine實例。