У меня есть вопрос о распараллеливании на R с помощью doParallel, вызывающего data.table для разных сценариев
Используя Web как фронт, пользователь может выбрать выполнение от 1 до многих сценариев. Эти сценарии затем вызываются с помощью doParallel.
Вопрос:
- Ограничивает ли вызов скрипта с использованием doParallel параллелизацию скрипта?
- Возможно ли, что встроенные функции data.table снижают эффективность
при вызове из скрипта с использованием приведенного ниже кода?
Так работает код
Примеры переменных
models_names<- list("Model_1", "Model_2")
file_path_to_execute <- list(
"Model_1"= "C:/APPS/script_model_1.R",
"Model_2"= "C:/APPS/script_model_2.R",
...
"Model_N"= "C:/APPS/script_model_N.R",
)
Основной сценарий считывает информацию, выбранную пользователем, и вызывает выполнение по выбранным сценариям.
main.R
no_cores <- parallel::detectCores() - 1
print(paste(Sys.time(),"no_cores= ",no_cores))
cl <- parallel::makeCluster(no_cores)
doParallel::registerDoParallel(cl)
parallel::clusterExport(cl, varlist = vars_list <- as.vector(ls()), envir = environment())
tryCatch({
RESULTS <- as.data.frame(parLapply(cl, models_names, function(x) {
source(
file_path_to_execute[[x]],
local = TRUE,
echo = TRUE,
print.eval = TRUE,
spaced = TRUE,
chdir = TRUE
)
},
error = function(e) {
print(paste(Sys.time(), "Exception on EXECUTION", e))
},
finally = {
stopCluster(cl)
answer <- Reduce("cbind", RESULTS)
print(paste("Results are:", RESULTS))
})
...
для отдельных сценариев setDTthreads
был установлен в 0, поэтому он выбирает все доступные