Не удается создать вложенные фоновые / параллельные процессы

Я пытаюсь создать докеризированный микросервис R, который работает на AWS ECS и включает пакеты {future}, {future.callr} и {furrr} (и, таким образом, неявно {callr} и {processx})

Когда я провожу локальное тестирование с контейнером докеров, который ограничен 1 ЦП и 650 МБ памяти (соответствует настройке этапа моего клиента; в производственной среде 1500 МБ и 4 ЦП), все работает нормально.

Однако на реальном экземпляре AWS я получаю следующие ошибки:

Ошибка 1:

Error in get_result(out, private$options) : 
  callr subprocess failed: could not start R, exited with non-zero status, has crashed or was killed

Ошибка 2:

Error in rethrow_call(c_processx_exec, command, c(command, args), stdin,  : 
  Cannot fork when running '/usr/local/lib/R/bin/R' (system error -12, Unknown error -12) @unix/processx.c:499 (processx_exec)

Я совершенно не в себе, сможет ли кто-нибудь дать мне подсказку о том, что происходит и / или как я могу это исправить?

Трудно представить представителя по этому вопросу, но вот основная суть общей настройки:

Обеспечение фоновых процессов

ensure_background_processes <- function(workers_level_1, workers_level_2){
  future::plan(
    list(
      future::tweak(future.callr::callr, workers = workers_level_1),
      future::tweak(future.callr::callr, workers = workers_level_2)
    )
  )
}

Функция-оболочка, которая обрабатывает две операции, которые должны происходить "одновременно", где каждая операция должна быть распараллелена по 3 объектам (так x будет, например, иметь длину 3)

foo <- function(x) {
  future::future({
    x %>%
      furrr::future_map(
        ~.x %>% bar()
      )
  })

  future::future({
    x %>%
      furrr::future_map(
        ~.x %>% baz()
      )
  })
}

Фактические функции, которые будут выполняться в каждом цикле распараллеливания

bar <- function(x) {
  # Do something useful in a while loop
}

baz <- function(x) {
  # Do something useful in a while loop
}

0 ответов

Другие вопросы по тегам