- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试设置一个并行任务,其中每个工作人员都需要进行数据库查询。我正在尝试为每个工作人员设置一个连接,如 this question 中所示但每次我尝试它都会返回 <Expired PostgreSQLConnection:(2781,0)>
无论我注册了多少 worker 。
这是我的代码:
cl <- makeCluster(detectCores())
registerDoParallel(cl)
clusterEvalQ(cl, {
library(RPostgreSQL)
drv<-dbDriver("PostgreSQL")
con<-dbConnect(drv, user="user", password="password", dbname="ISO",host="localhost")
})
foreach
尽管有错误,它还是失败了
task 1 failed - "expired PostgreSQLConnection"
clusterEvalQ(cl, {
library(RPostgreSQL)
drv<-dbDriver("PostgreSQL")
con<-dbConnect(drv, user="user", password="password", dbname="ISO",host="localhost")
dbGetQuery(con, "select inet_client_port()")
})
最佳答案
我能够在本地重现您的问题。我不完全确定,但我认为问题与方式有关 clusterEvalQ
在内部工作。例如,您说 dbGetQuery(con, "select inet_client_port())
给了你客户端端口输出。如果查询实际上是在集群节点上评估/执行的,那么您将无法看到此输出(与您无法直接读取在外部集群节点上执行的任何其他输出或打印语句的方式相同)。
因此,据我所知,评估首先以某种方式在本地环境上执行,然后相关的函数和变量被复制/导出到各个集群节点。这适用于任何其他类型的函数/变量,但显然不适用于数据库连接。如果连接/端口映射链接到主 R 实例,则连接将无法从从属实例工作。如果您尝试使用 clusterExport
,您也会得到完全相同的错误。函数以导出在主实例上创建的连接。
作为替代方案,您可以做的是在个人内部创建单独的连接 foreach
任务。我已经用本地数据库验证了以下工作:
library(doParallel)
nrCores = detectCores()
cl <- makeCluster(nrCores)
registerDoParallel(cl)
clusterEvalQ(cl,library(RPostgreSQL))
clusterEvalQ(cl,library(DBI))
result <- foreach(i=1:nrCores) %dopar%
{
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, user="user", password="password", dbname="ISO",host="localhost")
queryResult <- dbGetQuery(con, "fetch something...")
dbDisconnect(con)
return(queryResult)
}
stopCluster(cl)
foreach
创建并断开一个新连接。迭代。因此,您可能会产生一些性能开销。您显然可以通过智能地拆分查询/数据来规避这一点,以便在同一次迭代中完成大量工作。理想情况下,您应该将工作拆分为与您可用的内核数量相同的数量。
关于RPostgreSQL 连接在使用 doParallel clusterEvalQ 启动后立即过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31037545/
registerDoParallel 中的集群和核心有什么区别?使用 doParallel 包时? 我的理解是否正确,在单台机器上这些是可以互换的,我会得到相同的结果: cl library(doP
以下问题是与此处描述的问题相关的非常详细的问题。 Previous Question 使用在 R 版本 3.2.3 的 c4.8xlarge(36 核)上启动的 Ubuntu Server 14.04
我正在尝试编写一个具有多线程功能的 CRAN 包。我使用 doSNOW 实现了完美的解决方案,但该软件包已被 CRAN 团队标记为“取代”,他们要求我切换到 doParallel 解决方案。这很好,但
我在 R 中创建了一个顺序模拟来迭代一个过程 10,0000 次。这需要大约 70 分钟,所以我决定与 doParallel 包并行尝试相同的事情。 我的 foreach 循环调用了一个名为“inv.
我在局域网上有两台服务器,全新安装了 Centos 6.4 minimum 和 R 3.0.1。两台计算机都安装了 doParallel、snow 和 snowfall 包。 服务器可以通过 ssh
我正在尝试使用 doParallel 包来估计多个非参数模型。我的问题似乎与 np 包有关。看看这个可重现的例子: library(np) library(doParallel) df 修复
我一直在使用apply将data.frame的每一行提交到R中的function使用Windows 10。这种方法有效。然而,随着函数变得更加复杂并且数据集更大,这种方法变得不可行。因此,我希望使用并
考虑使用并行 foreach 生成随机值的非常基本(且效率低下)的代码: cl <- makeCluster(2) registerDoParallel(cl) foreach(i = 1:100)
我一直在使用apply将data.frame的每一行提交到R中的function使用Windows 10。这种方法有效。然而,随着函数变得更加复杂并且数据集更大,这种方法变得不可行。因此,我希望使用并
我正在尝试设置一个并行任务,其中每个工作人员都需要进行数据库查询。我正在尝试为每个工作人员设置一个连接,如 this question 中所示但每次我尝试它都会返回 无论我注册了多少 worker 。
我正在一个 12 节点集群上运行一个并行进程。 并且想知道是否有办法在 foreach 期间获取节点 ID 或节点编号或节点名称称呼? 像这样的东西: foreach(i = 1:12, .combi
我有这段代码用于并行写入我的结果。我在 R 中使用 foreach 和 doParallel 库。 output_location='/home/Desktop/pp/' librar
我编写了一个运行良好的脚本,但它似乎并未进行并行处理。我尝试将内核从 3 个更改为 16 个,但生成数据的速度没有改变。谁能告诉我我做错了什么以及如何让它发挥作用? setwd("E:/Infecti
当我将 caret 与新配方包一起使用时,即 caret::train.recipe(),如果 doParallel 也用于注册并行后端,我会收到一条错误消息。附件是一个可重现的示例(插入符号文档中官
我正在尝试合并一个大 data.frame用一个小的,并并行计算。下面的代码完美运行,最大化了我机器的所有内核: len <- 2000000 set.seed(666) dat = paste(sa
我正在使用发布的示例代码 here使用 doParallel + foreach 显示 progress_bar(来自 progress 包)。然而,那里的解决方案使用 doSNOW(例如我用于测试的
我正在为 R 构建一个包,我希望它能够跨平台。我在Linux下开发,函数mclapply将从 parallel 开始使用包裹。 Windows(使用 doParallel )不支持此软件包。我真的很喜
如果我运行 foreach... %dopar%在不注册集群的情况下,foreach 会引发警告,并按顺序执行代码: library("doParallel") foreach(i=1:3) %dop
我有一个包含循环的函数 myfun = function(z1.d, r, rs){ x = z1.d[,r] or.d = order(as.vector(x), decreasing=TR
我必须运行大量随机森林模型,因此我想在我的 8 核服务器上使用 doParallel 来加快进程。 然而,某些模型需要比其他模型更长的时间,甚至可能会抛出错误。我想并行运行 8 个模型,如果一个模型抛
我是一名优秀的程序员,十分优秀!