Я использую два асинхронных процесса R (родительский и дочерний), где дочерний процесс должен периодически обновлять переменную. Я пытаюсь использовать пакет ipc
. Вот пример кода: дочерняя функция увеличивает счетчик, и родитель выводит результат
library(ipc)
childFunc <- function() {
while(TRUE) {
Sys.sleep(1)
j <- j + 1
q$producer$fireEval(j <- jj, list(jj=j))
cat(" -- child j=", j, "\n")
}
}
q <- queue()
j <- 0
q$consumer$start()
# this line does not work
child <- parallel::mcparallel(childFunc())
while(TRUE) {
Sys.sleep(1)
## q$consumer$consume()
# uncomment this line -> it works
cat("parent j=", j, "\n")
}
Однако родитель никогда не узнает об увеличении счетчика, вывод выглядит как
-- child j= 1
parent j= 0
-- child j= 2
parent j= 0
-- child j= 3
parent j= 0
...
Кажется, start
функция игнорируется (см. Комментарии), хотя в документации говорится, что она "Начинает выполнение потреблять каждые миллисекунды". Это работает, если я явно добавлю consume()
в цикле.
Есть ли способ заставить работать непрерывное потребление здесь?
с использованием ipc 0.1.3, R 3.6.1.