0

我已经在 R 中训练了一个模型,并希望使用renjin在 servlet 中计算预测。预测总是使用相同的独特模型。

为了避免花费资源来实例化 renjin 并为每个请求加载相同的模型,我正在考虑实例化 renjin 并在一个单例对象中加载一次模型,当 servet 容器启动时(在 ServletContextListener 中)。

我的问题是:这样进行线程安全吗?当同时完成多个预测请求(使用在同一实例中加载的相同模型)时,它如何与 renjin 一起工作?这样做的正确方法是什么:我应该在 renjin 实例上使用锁来保证它的线程安全吗?还是创建一个线程池?

4

1 回答 1

0

不应使用单个 Renjin Session 来同时评估多个脚本。

但是,您可以维护 RenjinScriptEngine对象池,或者使用ThreadLocal简单地为每个线程维护一个对象,就像我在RenjinServlet示例中所做的那样。

ScriptEngine如果您不期望高水平的并发请求,同步访问单个实例也可以工作。

但是,数据可以共享会话,因此如果内存是一个问题,那么您可以首先从类路径加载模型,或者WEB-INF然后与每个ScriptEngine实例共享。

于 2016-04-22T13:29:33.273 回答