Не удается создать вложенные фоновые / параллельные процессы
Я пытаюсь создать докеризированный микросервис 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
}