检查使用parallel :: makeCluster创建的集群的单个节点的状态

时间:2016-09-21 12:05:49

标签: r parallel-processing

我们说我已经使用cl <- parallel::makeCluster(2)创建了一个群集,并使用parallel:::sendCall(cl[[1]], f, arg)向第一个节点发送了一个呼叫。

我想获得特定节点的结果(在本例中是第一个节点)。我可以使用parallel:::recvResult(cl[[1]])来做到这一点。但是,此过程将一直阻止,直到收到结果。有没有办法检查特定节点的状态?即像&#34;这样的状态正在处理&#34;或&#34;已完成&#34;。

1 个答案:

答案 0 :(得分:1)

我建议使用标准socketSelect功能。例如:

library(parallel)
cl <- makePSOCKcluster(3, outfile="")

# Send task to worker 1
x <- 2
parallel:::sendCall(cl[[1]], sqrt, list(x), tag=1)

# Wait up to 5 seconds for worker 1 to send the result back
ready <- socketSelect(list(cl[[1]]$con), timeout=5)

if (ready > 0) {
    result <- parallel:::recvData(cl[[1]])
    cat(sprintf("sqrt(%f) = %f\n", x, result$value))
} else {
    cat("result not ready after five seconds\n")
}

有关更完整的示例,请参阅snowSOCK.R文件中recvOneData.SOCKcluster函数的来源。