【问题标题】:future waits for execution on single-core machine未来等待在单核机器上执行
【发布时间】:2018-10-18 08:53:48
【问题描述】:

我有 2 台具有相同版本的 Ubuntu (16.04)、R (3.4.4) 和未来软件包 (1.10.0) 的机器。我正在运行下面的代码,它实现了异步编程

tic()
library(future)
plan(multisession)
mehAsync = function(){
    future::future({
        Sys.sleep(5)
        return('meh')
    })
}
out = mehAsync()
what = then(out,function(value){(value)})
toc()

预期的行为是执行将几乎立即结束,留下待处理的承诺。在一台机器上发生这种情况,执行会立即发生。但是在我拥有的另一台机器上,执行等待 mehAsync 函数执行,5 秒后完成。

如前所述,两台机器几乎相同。它们之间的主要区别在于速度较慢的是单核机器。但是根据我的理解,multisession 计划不应该需要多个内核。足够的资源来打开机器拥有的新 R 会话。

这里的具体问题是:

  • 我对预期行为的理解是否错误,这对于单核机器来说是正常的吗?
  • 还有哪些我没有考虑到的因素会影响这种行为?
  • 由于没有错误/警告消息并且我自己和其他人无法在独立机器上复制,我该如何调试此问题?

注意:这个问题是在尝试调查this other question时出现的

【问题讨论】:

    标签: r asynchronous future r-future


    【解决方案1】:

    multisession 计划的默认选项在单核机器中将workers 参数设置为availableCores()。这意味着如果在使用plan 时不覆盖参数,那么内核数量确实很重要。

    在做

    plan(multisession,workers=2)
    

    解决了这个问题

    【讨论】:

      猜你喜欢
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多