【问题标题】:R package Future - why does a loop with remote workers hangs the local R sessionR包Future - 为什么与远程工作者的循环会挂起本地R会话
【发布时间】:2020-04-14 06:06:13
【问题描述】:

如果您需要示例,请告诉我,但我认为没有必要。

我编写了一个 for 循环,它可以生成期货并将每个结果的结果存储在一个列表中。 plan 是远程的,例如,由 Internet 机器上的 4 个节点组成。

在第 4 个 future 被部署并且远程机器的所有核心都忙后,R 挂起,直到其中一个空闲。由于我没有使用任何本地内核,为什么它必须挂起?这是一种改变这种行为的方法吗?

【问题讨论】:

    标签: r parallel-processing package r-future


    【解决方案1】:

    这里是未来框架的作者。此行为是设计使然。

    您的主 R 会话有一定数量的可用工作人员。工人的数量取决于您制定的未来计划。您可以随时通过调用nbrOfWorkers() 查看设置的工人数量。在您的情况下,您有四个远程工作人员,这意味着 nbrOfWorkers() 返回 4。

    您可以随时激活此数量的期货 (= nbrOfWorkers()) 而不会被阻止。当你试图再创造一个未来时,没有更多的工人可以承担它。此时,唯一的选择就是阻止。

    现在,您可能会问:当远程工作人员都很忙时,我该如何使用我的本地机器?

    实现这一目标的最简单方法是在远程工作人员组合中添加一名本地工作人员。例如,如果您允许自己在本地机器上使用两个工人,您可以这样做:

    library(future)
    remote_workers <- makeClusterPSOCK(c("n1.remote.org", "n2.remote.org"))
    local_workers <- makeClusterPSOCK(2)
    plan(cluster, workers = c(remote_workers, local_workers))
    

    甚至只是

    library(future)
    remote_workers <- c("n1.remote.org", "n2.remote.org")
    local_workers <- rep("localhost", times = 2)
    plan(cluster, workers = c(remote_workers, local_workers))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多