future等待在单核计算机上执行

future等待在单核计算机上执行,r,asynchronous,future,r-future,R,Asynchronous,Future,R Future,我有两台机器,都有相同版本的Ubuntu(16.04)、R(3.4.4)和future软件包(1.10.0)。我正在运行下面的代码,它实现了异步编程 tic() library(future) plan(multisession) mehAsync = function(){ future::future({ Sys.sleep(5) return('meh') }) } out = mehAsync() what = then(out,funct

我有两台机器,都有相同版本的Ubuntu(16.04)、R(3.4.4)和future软件包(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会话

具体问题如下:

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

注意:当试图调查
多段计划的默认选项时,出现了这个问题,该选项将
工作者
参数设置为单核机器中的
可用资源()。这意味着,如果在使用
plan
时不覆盖参数,则核心数确实很重要

解决这个问题

plan(multisession,workers=2)