R ipc package: `queue $ consumer $ start ()` игнорируется - PullRequest
0 голосов
/ 01 ноября 2019

Я использую два асинхронных процесса 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.

...