我想并行运行一组我在clusterEvalQ中声明的函数。在这些函数中,有一个递归函数,它从文件中读取并再次将数据写入其中。
我想使用lockBinding和unlockBinding来避免同一个文件上的多个任务(即如果它在其中写入则不读取,反之亦然)。
目前,我的代码结构是:
check_bind <- function(sym, env) {
if (bindingIsLocked(sym, env)) {
Sys.sleep(0.001)
check_bind(sym, env) } else {
return(TRUE)
}
e <- new.env()
foreach () %dopar {
[code]
if (!exist(var)){ var <- fread(varfile)
} else {
check_bind("var", e)
var <- fread(varfile)}
[code]
assign("var", var, e)
if (check_bind("var", e)) {
lockBinding("var", e)
write.table(var, varfile, append=TRUE)
unlockBinding("var",e)}
[code]
因此,代码适用于具有4个核心的多个任务(直到85个任务),但总是失败,说它无法读取文件'因为格式不合适但真正的问题是它还没有完成写入。
我怎样才能强制执行,在完成写作之前不要阅读?
谢谢大家! 卡伦