python - R中的并行处理调用网状python函数
问题描述
我reticulate
在 RMarkdown 中使用并尝试运行具有并行处理的本地定义的 Python 函数。我环顾四周,这个答案是我发现的最接近解决我的问题的答案,除了我使用的函数不是在单独的 Python 脚本中定义的,而是在 Rmarkdown 中定义的。下面是一个使用的简化示例llply
,它给了我错误Error in unserialize(socklist[[n]]) : error reading from connection
。
我也尝试过foreach()
,即使使用 . 也无法识别该py$
对象reticulate::py$function
。
我也尝试过mclapply
and pbmcapply
,它似乎可以运行并参与所有核心,但它们会一直挂起并且不会完成。
```{r}
library(reticulate)
library(doParallel)
library(foreach)
library(plyr)
```
```{python}
def myFn1(x):
return(sqrt(x))
```
```{r}
cl <- makeCluster(detectCores())
registerDoParallel(cl)
llply(list(2, 3, 4), .fun=reticulate::py$myFn1, .parallel=TRUE)
stopCluster(cl)
```
我对网状或并行处理不是很了解,如果能提供任何帮助,我将不胜感激。
解决方案
我很确定reticulate不能并行运行,至少在一个 R 进程中设置它然后尝试在另一个进程中重用它时(就像你在这里做的那样)。原因是 reticulate 创建的对象无法导出到其他进程。我在https://cran.r-project.org/web/packages/future/vignettes/future-4-non-exportable-objects.html的“包:网状”部分中有一个示例。
一种可能的解决方法是为每个并行工作人员设置一个单独的网状实例。
推荐阅读
- r - 如何在一组长数据中找到列的平均条目数
- reactjs - 如何将 mdx 文件中的代码片段传递给反应组件?
- ios - React Native - 在 iOS 上使用 Hermes 并禁用 Flipper
- html - 带有圆形中心按钮的页脚 UI
- c# - 等待 GetComponent() 加载
- javascript - 当 responseType 为 arraybuffer 时,获取“content-disposition”值的正确方法是什么?
- amazon-web-services - 云第一方集成与第三方集成
- reactjs - 在 next js 上从 graphql 获取数据时,找到的数据未定义。我该如何解决这个问题?
- python - 如何在 Python 中遍历搜索引擎中的网站列表?
- database - 使用猫鼬进行高级搜索