首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在R中进行并行处理,调用Python脚本

在R中进行并行处理,调用Python脚本
EN

Stack Overflow用户
提问于 2018-06-26 20:33:22
回答 1查看 1.3K关注 0票数 1

我正在尝试用trying进行并行处理,我想要做的并行任务是调用python脚本。然而,它不能工作,也不能将结果从python取回R。下面是示例R,shiny和Python代码。App.R

代码语言:javascript
复制
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代码(multip.py)

代码语言:javascript
复制
def fsq(x):
    return x**2
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-27 05:37:47

错误消息与shiny无关

代码语言:javascript
复制
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)     

我对此的解释是,不能像序列化R函数那样序列化Python函数。一种简单的解决方法是在循环中使用source_python

代码语言:javascript
复制
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)     
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51043043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档