在servlet中使用renjin

时间:2016-04-22 08:35:49

标签: java r multithreading servlets renjin

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

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

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

1 个答案:

答案 0 :(得分:0)

单个Renjin会话不应该用于同时评估多个脚本。

然而,您可以维护Renjin ScriptEngine对象池,或者使用ThreadLocal来维护每个线程一个,就像我为RenjinServlet示例所做的那样。

如果您不期望高水平的并发请求,同步对单个ScriptEngine实例的访问也会有效。

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