Параллельная обработка в R блестящий, вызов скрипта Python - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь выполнить параллельную обработку в R блестящий, параллельная задача, которую я хочу сделать, это вызов сценария Python. Однако он не работает и не может получить результат обратно из Python в R. Ниже приведен пример R блестящего и Python-кода. App.R

library(shiny)
library(reticulate)
library(doParallel)
library(foreach)
ui <- fluidPage(

   # Application title
   titlePanel("Sample Program"),

      mainPanel(
         uiOutput("txtValue")
      )   
)
server <- function(input, output) {

  source_python("../../PythonCode/Multiprocessing/multip.py")  

  cl <- makeCluster(detectCores(), type='PSOCK')
  registerDoParallel(cl)

  result <- foreach(i=1:5) %dopar% fsq(i)
  stopCluster(cl)     
   output$txtValue <- renderUI({
    result   
   }) 

}
shinyApp(ui = ui, server = server)

Python Code (multip.py)

def fsq(x):
    return x**2

1 Ответ

0 голосов
/ 27 июня 2018

Сообщение об ошибке не зависит от shiny:

library(reticulate)
library(doParallel)
library(foreach)
library(parallel)

source_python("multip.py")  

cl <- makeCluster(detectCores(), type = 'PSOCK')
registerDoParallel(cl)

# throws: Error in unserialize(socklist[[n]]) : error reading from connection
foreach(i = 1:5) %dopar% fsq(i)

stopCluster(cl)     

Я интерпретирую это так, что нельзя сериализовать функцию Python, как можно сериализовать функцию R. Простой обходной путь - использовать source_python в цикле:

library(doParallel)
library(foreach)
library(parallel)

cl <- makeCluster(detectCores(), type = 'PSOCK')
registerDoParallel(cl)

foreach(i = 1:5) %dopar% {
  reticulate::source_python("multip.py")  
  fsq(i)
}
stopCluster(cl)     
...