У меня есть программа, которая многократно загружает большие наборы данных, которые хранятся в формате R Rds
.Вот глупый пример, который имеет все характерные особенности:
# make and save the data
big_data <- matrix(rnorm(1e6^2), 1e6)
saveRDS(big_data, file = "big_data.Rds")
# write a program that uses the data
big_data <- readRDS("big_data.Rds")
BIGGER_data <- big_data+rnorm(1)
print("hooray!")
# save this in a text file called `my_program.R`
# run this program a bunch
for (i = 1:1000){
system("Rscript my_program.R")
}
Узкое место - загрузка данных.Но что, если у меня где-то был отдельный процесс, который содержал данные в памяти?
Может быть, что-то вроде этого:
# write a program to hold the data in memory
big_data <- readRDS("big_data.Rds")
# save this as `holder.R` open a terminal and do
Rscript holder.R
Теперь есть процесс, выполняющийся где-то с моими данными в памяти.Как я могу получить его из другого сеанса R?(Я предполагаю, что это будет быстрее, чем загрузка, но верно ли это?)
Может быть, что-то вроде этого:
# write another program:
big_data <- get_big_data_from_holder()
BIGGER_data <- big_data+1
print("yahoo!")
# save this as `my_improved_program.R`
# now do the following:
for (i = 1:1000){
system("Rscript my_improved_program.R")
}
Так что я думаю, что мой вопрос как бы выглядела функция get_big_data_from_holder()
?Можно ли сделать это?Практическая?
Предыстория: я пытаюсь обойти то, что выглядит как утечка памяти в интерфейсе R к keras / tenorflow, которую я описал здесь .Обходной путь - позволить ОС очистить весь мусор, оставшийся после сеанса TF, чтобы я мог запускать сеансы TF один за другим без замедления компьютера до ползания.
Редактировать: возможно, я мог бы сделатьэто с clone()
системным вызовом?Концептуально я могу представить, что я бы клонировал процесс, выполняющий holder
, а затем выполнил бы все команды в программе, которые зависят от загруженных данных.Но я не знаю, как это будет сделано.