future 等待在单核机器上执行

future waits for execution on single-core machine

我有 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 会话。

这里的具体问题是:

注意:在尝试调查时出现了这个问题

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

正在做

plan(multisession,workers=2)

解决了这个问题