編集:これを再現できるかどうかの確認だけでも役に立ちます。これを試すのに必要なコンピューターは 1 台だけです (リモート接続は必要ありません)。
更新他の人はこれを Mac または Win7 で再現できないようです。そのため、WinXP 固有または私のマシン固有のいずれかです。この時点で、私はあきらめています。
リモート カーネルの問題をデバッグできるように、フロント エンドとカーネルの通信方法に関するチュートリアルがあるとよいでしょう。そのような一般的な回答 (または他の場所のチュートリアルへのリンク) は大歓迎です。Sascha Kratky によるRemote Kernel Strategiesについては既に知っています。
ここで実際的な質問です。 リモート マシンに何らかの方法で接続すると (たとえば、リモート カーネル戦略を使用するなど)、フロント エンドは遅かれ早かれフリーズします。どうすればこれを防ぐことができますか?
単一のマシンで問題を再現する方法は次のとおりです (リモート接続は必要ありません)。
新しいカーネル構成を作成します (評価メニュー -> カーネル構成オプション...)。
詳細オプションを選択します。
MLOpen への引数:
-LinkName "8000@YOUR-IP-HERE,8001@YOUR-IP-HERE" -LinkMode Listen -LinkProtocol TCPIP -LinkHost "YOUR-IP-HERE" -LinkOptions MLDontInteract
(コンピュータの IP アドレスに置き換え
YOUR-IP-HERE
ます。Windows ではipconfig
、コマンド ウィンドウに入力することで取得できます。)カーネルを起動するシェル コマンド: 空のままにします (手動で行います)。
新しいノートブックを開き、ノートブックのカーネルを今セットアップしたものに設定し、何かを評価します (
1+1
)。ここで、接続がタイムアウトする前にカーネルを手動で起動する必要があります。
math
そのため、コマンド ライン モードで新しいカーネル ( ) を起動し、以下を評価します。link=LinkConnect["8000,8001",LinkProtocol->"TCPIP"] (* connect to front end link *) $ParentLink = link; (* set the front end link as parent link *)
これで接続が確立され、すべてが正しく機能しているように見えます (フロント エンドのピンク色のメッセージ ウィンドウの 1 つのメッセージを保存します)。
評価し
Manipulate[n, {n, 0, 100, 1}]
ます。まず、これもうまくいくようです。スライダーで遊んでみましょう。遅かれ早かれ、フロントエンドはフリーズし、強制終了する必要があります。私にとっては、スライダーを離さずに最大 10 秒間上下にドラッグするだけで十分です。
フロントエンドがフリーズするのはなぜですか? すべてが正しく機能するように、フロントエンドとカーネルの間に TCPIP モード接続を作成するにはどうすればよいですか?
いくつかのメモ:
- 私はWindows XPを使用しています。
- を使用すれば問題は発生しません
LinkProtocol -> "SharedMemory"
。 - Evaluation -> Abort Evaluation を使用して計算を中止すると、正しく機能します。
Links[]
私はそれを使用して確認しMathLink`$PreemptiveLink
、MathLink`$ServiceLink
作成してLinkConnectedQ[]
返品True
します。
Manipualate
繰り返しますが、フロント エンドはスライダーを数秒間ドラッグし続けた後にのみフリーズすることに注意してください。