Убить фьючерс от future_apply () на Linux - PullRequest
2 голосов
/ 08 января 2020

Я использую future_lapply() для параллельного выполнения кода на Linux машине. Если я досрочно завершаю процесс, освобождается только один работник, и параллельные процессы продолжают сохраняться. Я знаю, что могу ввести tools::pskill(PID), чтобы завершить каждый отдельный процесс, но это утомительно, так как я работаю на 26 ядрах.

Если есть способ сделать системный вызов на linux из R, чтобы получить все активные PID?

Я настроил future_lapply как таковой:

# set number of workers
works <- 26
plan(multiprocess, workers = works)
future_lapply(datas, function(data) {
  # do some long processes
}

Если я завершу процесс и выполню top, я все равно увижу: enter image description here

Поскольку мои параллельные сеансы все еще работают.

Обновление с информацией о сеансе:
version.string R версия 3.6.2 (2019-12-12)
future 1.12.0
future.apply 1.2.0

1 Ответ

2 голосов
/ 08 января 2020

Надеюсь, это поможет.

require(future)
works <- 26
plan(multiprocess, workers = works)
future_lapply(datas, function(data) {
  # do some long processes
})

# get all PIDs of the r processess
v <- listenv::listenv()  # requires listenv package
for (ii in 1:works) {
   v[[ii]] %<-% {
         Sys.getpid()
     }
}

for (i in 1:works) {
  #For windows
  system(sprintf("taskkill /F /PID %s", v[[i]]))

  #For Linux
  system(sprintf("kill -9 %s", v[[i]]))
}

Хорошего дня.

...