-
Notifications
You must be signed in to change notification settings - Fork 79
Open
Labels
Description
[Repost from this SO question].
I would like to use rJava in combination with mcparallel but obviously the JVM cannot be forked. Therefore a separate JVM instance needs to be initiated for each child process, e.g:
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)
}))
However the problem in my case is that the JVM has already been initiated in the (main) parent process as well. This makes it impossible to use rJava in the child process:
#init JVM in parent
.jinit()
#Doesn't work anymore
mccollect(mcparallel({
xlsx::read.xlsx(myfile, 1)
}))
So what I really need is a way to shutdown/kill and restart the JVM in the child process. Simply detach("package:rJava", unload = TRUE) doesn't seem to do the trick. The force.init parameter doesn't seem to result in a restart either:
#Also doesn't work:
.jinit()
mccollect(mcparallel({
.jinit(force.init = TRUE)
xlsx::read.xlsx(myfile, 1)
}))
Is there some way I can forcefully shutdown/kill the JVM in order to reinitiate it in the child process?