Вызывает ли R Parallell предельное распараллеливание на data.table? - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть вопрос о распараллеливании на 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, поэтому он выбирает все доступные

...