我在R中训练了一个模型,并希望使用renjin计算servlet中的预测。预测总是使用相同的独特模型。
为了避免花费资源实例化renjin并为每个请求加载相同的模型,我正在考虑实例化renjin并在servet容器启动时(在ServletContextListener中)在单个对象中加载模型一次。
我的问题是:这样的线程安全吗?当同时完成多个预测请求时(使用在同一实例中加载的相同模型),它如何与renjin一起工作?这样做的正确方法是什么:我是否应该使用renjin实例上的锁来保证线程的安全?或者创建一个线程池而不是?
答案 0 :(得分:0)
单个Renjin会话不应该用于同时评估多个脚本。
然而,您可以维护Renjin ScriptEngine
对象池,或者使用ThreadLocal
来维护每个线程一个,就像我为RenjinServlet示例所做的那样。
如果您不期望高水平的并发请求,同步对单个ScriptEngine
实例的访问也会有效。
数据可以共享会话,但是,如果内存是一个问题,那么你
可以先从类路径或WEB-INF
加载模型,然后与每个ScriptEngine
实例共享。