Я хотел бы использовать rJava
в комбинации с mcparallel
, но, очевидно, JVM нельзя разветкить. Поэтому для каждого дочернего процесса должен быть инициирован отдельный экземпляр JVM, например:
library(rJava)
library(parallel)
myfile <- system.file("tests", "test_import.xlsx", package = "xlsx")
#This works:
mccollect(mcparallel({
#Automatically initiates JVM in child
xlsx::read.xlsx(myfile, 1)
}))
Однако проблема в моем случае состоит в том, что JVM уже был инициирован в (основном) родительском процессе. Это делает невозможным использование rJava
в дочернем процессе:
#init JVM in parent
.jinit()
#Doesn't work anymore
mccollect(mcparallel({
xlsx::read.xlsx(myfile, 1)
}))
Так что мне действительно нужен способ выключить/убить и перезапустить JVM в дочернем процессе. Просто detach("package:rJava", unload = TRUE)
, похоже, не делает трюка. Параметр force.init
, похоже, не вызывает перезагрузки:
#Also doesn't work:
.jinit()
mccollect(mcparallel({
.jinit(force.init = TRUE)
xlsx::read.xlsx(myfile, 1)
}))
Есть ли способ принудительно отключить/убить JVM, чтобы возобновить его в дочернем процессе?