残念ながら、print.SOCKcluster
メソッドでは、クラスタオブジェクトが使用可能かどうかはわかりません。ただし、クラスタオブジェクトの要素を出力することで、使用可能かどうかを調べることができます。したがって、print.SOCKnode
メソッドを使用してください。
> parallel:::print.SOCKnode
function (x, ...)
{
sendCall(x, eval, list(quote(Sys.getpid())))
pid <- recvResult(x)
msg <- gettextf("node of a socket cluster on host %s with pid %d",
sQuote(x[["host"]]), pid)
cat(msg, "\n", sep = "")
invisible(x)
}
<bytecode: 0x2f0efc8>
<environment: namespace:parallel>
したがって場合、:ソースコードに見られるように、実際に、対応する作業者のプロセスIDを取得するために、ソケット接続を介してメッセージを送信
> library(parallel)
> cl <- makeCluster(3)
> for (node in cl) try(print(node))
node of a socket cluster on host ‘localhost’ with pid 29607
node of a socket cluster on host ‘localhost’ with pid 29615
node of a socket cluster on host ‘localhost’ with pid 29623
> stopCluster(cl)
> for (node in cl) try(print(node))
Error in summary.connection(connection) : invalid connection
Error in summary.connection(connection) : invalid connection
Error in summary.connection(connection) : invalid connection
注print.SOCKnode
こと:例えばクラスタオブジェクトにstopCluster
という名前を付けた場合、ソケット接続を使用しようとするとエラーが発生します。
これは私が探していたものです。クラスタを停止すると、その違いがわかります。しかし、私が気づいたのは、私が思っていたよりも2つ以上の関係があるということです。クラスタの作成と停止はそれぞれ3つの接続を追加したり引いたりしますが、残りの2つ(オプションall = FALSE)があります。それはあなたが持っている以上に2つです。それが私が止めなければならない別のクラスターなのか、それが他のものなのか、どうすれば分かりますか? – BioBroo
@BioBroo:おそらくあなたの設定に固有のものです。 GUIやIDEからRを実行している場合は、接続を作成することができます。あるいは、あなたの '.Rprofile'、' .Rprofile.site'などの中に何かある可能性があります。 –