2016-07-11 12 views
1

stopClusterを使用してワークスペースからクラスタを削除しようとすると、動作していないようです。以下は私が使用しているコードです。stopCluster(R)が正常に動作しているかどうかを確認する方法

> cl <- makeCluster(3) 
> cl 
socket cluster with 3 nodes on host ‘localhost’ 
> stopCluster(cl) 
> cl 
socket cluster with 3 nodes on host ‘localhost’ 

私はおそらくそれを削除した後、コマンドclがまだ3つのノードとのソケットクラスタと呼ばれることに注意してください。 object cl is not foundというエラーが表示されませんか?クラスタが実際に削除されたことをどのように知ることができますか?関連する質問:Rを閉じると、クラスタが終了し、コンピュータがすべてのコアを使用できる通常の状態に戻りましたか?

答えて

2

rm(cl)を実行するまで、clが見つからないというエラーは発生しません。クラスタを停止しても、オブジェクトは環境から削除されません。

使用showConnections何の接続がアクティブでないことを確認するには:

> require(parallel) 
Loading required package: parallel 
> cl <- makeCluster(3) 
> cl 
socket cluster with 3 nodes on host ‘localhost’ 
> showConnections() 
    description   class  mode text  isopen can read can write 
3 "<-localhost:11129" "sockconn" "a+b" "binary" "opened" "yes" "yes"  
4 "<-localhost:11129" "sockconn" "a+b" "binary" "opened" "yes" "yes"  
5 "<-localhost:11129" "sockconn" "a+b" "binary" "opened" "yes" "yes"  
> stopCluster(cl) 
> showConnections() 
    description class mode text isopen can read can write 
> 

コンピュータが「通常の状態に戻った」されるかどうかは、あなたが作成したクラスタのタイプによって異なります。単純なソケットまたはフォーククラスタの場合、親プロセスを正常に停止すると、すべての子プロセスが終了するはずです。もっと複雑なクラスターであれば、Rを終了しても、ノードで開始したすべてのジョブが停止するわけではありません。

+0

これは私が探していたものです。クラスタを停止すると、その違いがわかります。しかし、私が気づいたのは、私が思っていたよりも2つ以上の関係があるということです。クラスタの作成と停止はそれぞれ3つの接続を追加したり引いたりしますが、残りの2つ(オプションall = FALSE)があります。それはあなたが持っている以上に2つです。それが私が止めなければならない別のクラスターなのか、それが他のものなのか、どうすれば分かりますか? – BioBroo

+0

@BioBroo:おそらくあなたの設定に固有のものです。 GUIやIDEからRを実行している場合は、接続を作成することができます。あるいは、あなたの '.Rprofile'、' .Rprofile.site'などの中に何かある可能性があります。 –

0

残念ながら、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という名前を付けた場合、ソケット接続を使用しようとするとエラーが発生します。

+0

これも機能します。 – BioBroo

関連する問題