我在R中训练了一个模型,并希望使用仁津在servlet中计算预测。预测总是使用相同的独特模型。
为了避免花费资源实例化renjin并为每个请求加载相同的模型,我考虑在servet启动时(在ServletContextListener中)实例化renjin并在单个对象中加载模型一次。
我的问题是:这样进行线程安全吗?当同时执行多个预测请求(使用同一个实例中加载的相同模型)时,它是如何与renjin一起工作的?这样做的正确方法是什么:我是否应该在renjin实例上使用一个锁来保证线程的安全?或者创建一个线程池来代替?
发布于 2016-04-22 13:29:33
不应使用单个Renjin会话同时评估多个脚本。
但是,您可以维护Renjin ScriptEngine
对象池,也可以使用ThreadLocal
简单地维护每个线程一个线程,就像我在RenjinServlet示例中所做的那样。
如果您不需要高级别的并发请求,那么同步访问单个ScriptEngine
实例也是可行的。
但是,数据可以是共享会话,因此如果内存是问题,那么首先可以从类路径或WEB-INF
加载模型,然后与每个ScriptEngine
实例共享。
https://stackoverflow.com/questions/36788902
复制相似问题