Распараллеливание цикла for, который загружает информацию из Oracle в R - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть функция, которую можно прочитать как

`For every period{

 run an specific query in the Oracle server
 and download the data

}`

Мой вопрос касается того, как я могу легко создавать разные экземпляры, выполняющие шаг цикла for, потому что большая часть времени расходуется на отправку запроса индивидуальноно если я запускаю несколько запросов одновременно, они не становятся медленнее.

Моя цель состоит в том, чтобы, учитывая, что я мог использовать 40 потоков одновременно, запускать N разных R сессий, где каждый сеанс выполняет шаг цикла (и сам запрос), чтобы ускорить работу

1 Ответ

0 голосов
/ 16 ноября 2018

Вы можете запустить свою собственную параллель для цикла:

library(future)
plan(multiprocess, workers = N)

res <- listenv::listenv()
for (period in periods) {
  res[[period]] %<-% {
    query_and_download(period)
  }
}
res <- as.list(res)

или используйте параллельный вызов lapply:

library(future.apply)
plan(multiprocess, workers = N)
res <- future_lapply(periods, FUN = function(period) {
  query_and_download(period)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...