R - 使用doParallel和lockBinding从不同的核心写入和读取相同的文件

时间:2018-02-06 17:26:57

标签: r locking doparallel

我想并行运行一组我在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个任务),但总是失败,说它无法读取文件'因为格式不合适但真正的问题是它还没有完成写入。

我怎样才能强制执行,在完成写作之前不要阅读?

谢谢大家! 卡伦

0 个答案:

没有答案