未来等待在单核计算机上执行

时间:2018-10-18 00:35:11

标签: r asynchronous future r-future

我有两台机器,它们具有相同版本的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

时出现了此问题

1 个答案:

答案 0 :(得分:1)

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

plan(multisession,workers=2)

解决了这个问题