R 包未来 - 为什么与远程工作人员的循环会挂起本地 R 会话



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

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

部署第 4 个未来并且远程计算机的所有内核都处于繁忙状态后,R 将挂起,直到其中一个内核空闲。由于我没有使用任何本地内核,为什么它必须挂起?这是改变这种行为的一种方式吗?

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

主 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))

最新更新