2016-04-22 14 views
0

Ich habe ein Modell in R trainiert und möchte Vorhersagen in einem Servlet unter Verwendung von renjin berechnen. Die Vorhersagen verwenden immer das gleiche einzigartige Modell.Renjin in einem Servlet verwenden

Um Ressourcen zu vermeiden, die renjin instanziieren und das gleiche Modell für jede Anfrage laden, erwäge ich, Renjin zu instantiieren und das Modell einmal in einem Singleton-Objekt zu laden, wenn der servet-Container startet (in einem ServletContextListener).

Meine Frage ist: ist es thread sicher, so zu verfahren und wie funktioniert es mit Renjin, wenn mehrere Vorhersageanforderungen zur gleichen Zeit (mit dem gleichen Modell in der gleichen Instanz geladen) ausgeführt werden? Was ist der richtige Weg, um dies zu tun: soll ich ein Schloss für die Renjin-Instanz verwenden, um es sicher zu halten? oder stattdessen einen Pool von Threads erstellen?

Antwort

0

Eine einzelne Renjin-Sitzung sollte nicht zur gleichzeitigen Auswertung mehrerer Skripts verwendet werden.

können Sie jedoch Pool von Renjin ScriptEngine Objekte halten, oder ThreadLocal verwenden, um einfach eine pro Thread zu halten, wie ich für das RenjinServlet Beispiel tat.

Synchronisieren des Zugriffs auf eine einzige Instanz würde auch funktionieren, wenn Sie keine hohe Anzahl gleichzeitiger Anfragen erwarten.

Daten können Sessions geteilt werden, so jedoch, wenn der Speicher ist ein Thema, dann Sie das Modell aus dem Classpath oder WEB-INF zuerst laden und dann mit jedem der ScriptEngine Instanzen teilen.

Verwandte Themen