我们说我已经使用cl <- parallel::makeCluster(2)
创建了一个群集,并使用parallel:::sendCall(cl[[1]], f, arg)
向第一个节点发送了一个呼叫。
我想获得特定节点的结果(在本例中是第一个节点)。我可以使用parallel:::recvResult(cl[[1]])
来做到这一点。但是,此过程将一直阻止,直到收到结果。有没有办法检查特定节点的状态?即像&#34;这样的状态正在处理&#34;或&#34;已完成&#34;。
答案 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
函数的来源。