16

parallelパッケージを使用しようとしていmakeClusterますが、完了できないことがわかりました。の次の行までハングをたどりましたnewPSOCKnode

con <- socketConnection("localhost", port = port, server = TRUE, 
    blocking = TRUE, open = "a+b", timeout = timeout)

そのコマンドはストールします (デフォルトのタイムアウトが大きな値であることを前提としています)。これは、私たちの仕事用コンピューターに課せられた「熱狂的な IT ルール」によるものではないかと私は考えていますが、問題の原因を追跡 (および修正) する方法についての提案を歓迎します。これは Windows7-64、「Enterprise」、R 3.0.1 です。

詳細: デバッグ セッション内で を設定しましたが、タイムアウト値を確認することさえできない場所に閉じ込められているかのようにtimeout < - 10、まだハングします。socketConnection

Richie Cotton のデータと同じ時点での私のダンプは次のとおりです。

Browse[3]> ls.str()
arg :  chr "parallel:::.slaveRSOCK()"
cmd :  chr "\"C:/Users/carl.witthoft/Documents/R/R-3.0.1/bin/x64/Rscript\" -e \"parallel:::.slaveRSOCK()\" MASTER=localhost PORT=11017 OUT="| __truncated__
env :  chr "MASTER=localhost PORT=11017 OUT=/dev/null TIMEOUT=2592000 METHODS=TRUE XDR=TRUE"
machine :  chr "localhost"
manual :  logi FALSE
master :  chr "localhost"
methods :  logi TRUE
options : <environment: 0x000000000ccac6a0> 
outfile :  chr "/dev/null"
port :  int 11017
rank :  int 1
renice :  int NA
rscript :  chr "\"C:/Users/carl.witthoft/Documents/R/R-3.0.1/bin/x64/Rscript\""
timeout :  num 2592000
useXDR :  logi TRUE

したがって、ポート番号が異なることを除けば、すべてが一致すると思います。

次のトリック: シェルを開いて実行netsh advfirewall firewall add rule name="Open Port 11017" dir=in action=allow protocol=TCP localport=11017 し、「OK」の応答を得ました。実行netstat -a -n して、次の行を見つけました。

TCP 0.0.0.0:11017 0.0.0.0:0 LISTENING

しかし、実行makePSOCKcluster 中はまだ同じ場所でハングします。

次へ:Rコマンド ラインから (cygwin bash 経由で) 実行しようとしましたが、表示されるエラー メッセージは次のとおりですError in loadhistory(file) : no history mechanism available Execution halted。その後、-C で R プロンプトに戻ります。

4

3 に答える 3

3

テスト 1: 明白なコマンドは機能しますか?

library(parallel)    
cluster <- makePSOCKcluster("localhost")    
parSapply(cluster, 1:5, sqrt)
stopCluster(cluster)

テスト 2: ポートがブロックされていますか?

によると?makeCluster、デフォルトのポートは です10187。そのポートが開いているかどうかをネットワーク管理者に確認してください。

テスト 3: 渡された変数はsocketConnection正しく見えるか?

私がそうしdebugonce(parallel:::newPSOCKnode)てから、への呼び出しの直前にステップスルーするとsocketConnection、ワークスペースは次のようになります。

ls.str()
arg :  chr "parallel:::.slaveRSOCK()"
## cmd :  chr "\"C:/PROGRA~1/R/R-215~1.2/bin/x64/Rscript\" -e \"parallel:::.slaveRSOCK()\" MASTER=localhost PORT=10187 OUT=/dev/null TIMEOUT=2"| __truncated__
## env :  chr "MASTER=localhost PORT=10187 OUT=/dev/null TIMEOUT=2592000 METHODS=TRUE XDR=TRUE"
## machine :  chr "localhost"
## manual :  logi FALSE
## master :  chr "localhost"
## methods :  logi TRUE
## options : <environment: 0x0000000010bf2518> 
## outfile :  chr "/dev/null"
## port :  num 10187
## rank :  int 1
## renice :  int NA
## rscript :  chr "\"C:/PROGRA~1/R/R-215~1.2/bin/x64/Rscript\""
## timeout :  num 2592000
## useXDR :  logi TRUE

同じものが渡されていますか?

于 2013-10-08T14:29:56.030 に答える
2

ええと、私は完全なばかのように感じませんか。

「ソフトウェア デバッグの 3 つの R」 (再試行、再起動、再ロード) に戻り、システムを再起動して手動ワーカーの起動に成功した後、クラスターを作成してみましたmanual=FALSE が、そこでもすぐに成功しました。

編集: my.Rprofileloadhistory()toに変更するif(interactive() ) loadhistory()ことは、関数を正常に使用するために重要であることを明確にする必要がありclusterます。

Richie と Steve の有益なコメントと提案のすべてに感謝します。私は確かに「ボンネットの下で」多くのことを学んだので、少なくとも私にとっては非常にポジティブな経験でした.

(つまり、WindowsOS の何かや壊れた通話が邪魔をしていたのかはわかりませんが、すべてがうまくいけば、うまくいきます)

于 2013-10-09T12:20:16.057 に答える