Код общей библиотеки RServe

Возможно ли, что процессы, порожденные RServe, совместно используют некоторые общие библиотеки, загружаемые один раз в память? Представьте, что мне нужно одновременно выполнить приведенный ниже код на 100 различных RConnections.

library(libraryOfSize40MB)
fun()

Это означает, что мне нужно около 3,9 ГБ памяти только для загрузки библиотеки. Я бы предпочел загрузить библиотеку один раз, а затем выполнить fun() сто раз, чтобы я мог запустить это на дешевом хосте.

Может быть, это полезно? https://github.com/su/Rserve/blob/master/NEWS#L40-L48


person Przemek    schedule 15.07.2015    source источник
comment
Это похоже на дубликат вопроса: stackoverflow.com/questions/28634345/   -  person Daniel Neel    schedule 17.07.2015


Ответы (1)


Возможно. Вы должны запустить RServe из оболочки R, используя run.serve перед загруженными библиотеками:

library(Rserve)

#load libraries so all connections will share them
library("yaml")
library("reshape")
library("rjson")
library("zoo")
(...)
library("stringr")

run.Rserve(debug = TRUE, port = 6311, remote=TRUE, auth=FALSE, args="--no-save", config.file = "/etc/Rserve.conf")

Каждое новое соединение сможет видеть эти библиотеки

library(RSclient)
con = RS.connect(host='10.1.2.3')
RS.eval(con, quote(search()))
> #lots of libraries available
person Przemek    schedule 17.07.2015
comment
Для всех, кто думает, что это не работает, как сначала сделал я, вы должны выполнять свои команды через метод RS.eval. - person Chris Townsend; 09.01.2017