正在运行doRedis-即使在';它已经出口了
我通过在一台机器上运行worker,在另一台机器上运行master/server来测试doRedis包。我的主机上的代码如下所示:正在运行doRedis-即使在';它已经出口了,r,parallel-processing,redis,cluster-computing,r-doredis,R,Parallel Processing,Redis,Cluster Computing,R Doredis,我通过在一台机器上运行worker,在另一台机器上运行master/server来测试doRedis包。我的主机上的代码如下所示: #Register ... r <- foreach(a=1:numreps, .export(...)) %dopar% { train <- func1(..) best <- func2(...) weights <- func3(...) return ...
#Register ...
r <- foreach(a=1:numreps, .export(...)) %dopar% {
train <- func1(..)
best <- func2(...)
weights <- func3(...)
return ...
}
#寄存器。。。
r这种代码在过去对于doParallel、doSNOW和doMPI包是一个问题,但是在过去的一年左右,它们得到了改进,以更好地处理它。问题是变量被导出到一个特殊的“导出”环境,而不是全局环境。这在各种方面都是可取的,但这意味着后端必须做更多的工作,以便导出的变量在导出函数的范围内。看起来doRedis还没有更新以使用这些改进
下面是一个简单的示例,说明了问题:
library(doRedis)
registerDoRedis('jobs')
startLocalWorkers(3, 'jobs')
glob <- 6
f1 <- function() {
glob
}
f2 <- function() {
foreach(1:3, .export=c('f1', 'glob')) %dopar% {
f1()
}
}
f2() # fails with the error: "object 'glob' not found"
库(doRedis)
registerDoRedis(‘作业’)
惊人的员工(3个“工作”)
我想我们需要更多的代码。也许是要点中一些扩展片段的链接?嗨!很抱歉,反应太晚。我在这里上传了一个要点:。并行化发生在“howmanypulses”函数中,“parttable”全局变量的访问发生在“createdataset”函数中。根据doRedis的日志,前300个作业运行良好,但程序在第一批300个作业之后崩溃,并声明找不到对象“parttable1”。对诊断此问题的任何帮助都将非常有用。非常感谢@liangricha每个核心启动一个redis worker通常会充分利用一台机器。再次感谢您的帮助!由于一个小的语法错误,删除了我的原始评论,但在后续操作中更新了我的问题。与clusterExport()等效的doRedis是setExport()函数
library(doParallel)
cl <- makePSOCKcluster(3)
registerDoParallel(cl)
f2() # works with doParallel
f2 <- function() {
f1 <- function() {
glob
}
foreach(1:3, .export=c('glob')) %dopar% {
f1()
}
}
f2() # works with doParallel and doRedis