8

編集:これを再現できるかどうかの確認だけでも役に立ちます。これを試すのに必要なコンピューターは 1 台だけです (リモート接続は必要ありません)。

更新他の人はこれを Mac または Win7 で再現できないようです。そのため、WinXP 固有または私のマシン固有のいずれかです。この時点で、私はあきらめています。


リモート カーネルの問題をデバッグできるように、フロント エンドとカーネルの通信方法に関するチュートリアルがあるとよいでしょう。そのような一般的な回答 (または他の場所のチュートリアルへのリンク) は大歓迎です。Sascha Kratky によるRemote Kernel Strategiesについては既に知っています。

ここで実際的な質問です。 リモート マシンに何らかの方法で接続すると (たとえば、リモート カーネル戦略を使用するなど)、フロント エンドは遅かれ早かれフリーズします。どうすればこれを防ぐことができますか?

単一のマシンで問題を再現する方法は次のとおりです (リモート接続は必要ありません)。

  1. 新しいカーネル構成を作成します (評価メニュー -> カーネル構成オプション...)。

    詳細オプションを選択します。

    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、コマンド ウィンドウに入力することで取得できます。)

    カーネルを起動するシェル コマンド: 空のままにします (手動で行います)。

  2. 新しいノートブックを開き、ノートブックのカーネルを今セットアップしたものに設定し、何かを評価します ( 1+1)。

  3. ここで、接続がタイムアウトする前にカーネルを手動で起動する必要があります。mathそのため、コマンド ライン モードで新しいカーネル ( ) を起動し、以下を評価します。

    link=LinkConnect["8000,8001",LinkProtocol->"TCPIP"] (* connect to front end link *)
    
    $ParentLink = link; (* set the front end link as parent link *)
    

    これで接続が確立され、すべてが正しく機能しているように見えます (フロント エンドのピンク色のメッセージ ウィンドウの 1 つのメッセージを保存します)。

  4. 評価しManipulate[n, {n, 0, 100, 1}]ます。まず、これもうまくいくようです。スライダーで遊んでみましょう。遅かれ早かれ、フロントエンドはフリーズし、強制終了する必要があります。私にとっては、スライダーを離さずに最大 10 秒間上下にドラッグするだけで十分です。

フロントエンドがフリーズするのはなぜですか? すべてが正しく機能するように、フロントエンドとカーネルの間に TCPIP モード接続を作成するにはどうすればよいですか?


いくつかのメモ:

  • 私はWindows XPを使用しています。
  • を使用すれば問題は発生しませんLinkProtocol -> "SharedMemory"
  • Evaluation -> Abort Evaluation を使用して計算を中止すると、正しく機能します。
  • Links[]私はそれを使用して確認しMathLink`$PreemptiveLinkMathLink`$ServiceLink作成してLinkConnectedQ[]返品Trueします。

Manipualate繰り返しますが、フロント エンドはスライダーを数秒間ドラッグし続けた後にのみフリーズすることに注意してください。

MathGroup の同じ質問へのリンク。

関連:リモートカーネルが機能するためのファイアウォール設定(Mathematica)

4

1 に答える 1

2

(答えではありませんが、これをコメントとして書くのは難しいです)

参考までに、フロントエンドがカーネルと通信する方法についての情報が少しあります http://reference.wolfram.com/mathematica/tutorial/AdvancedDynamicFunctionality.html

約半分下に、それは言います

The front end and kernel communicate with each other through several 
MathLink connections, known as the main link, the preemptive link, 
and the service link. The main and preemptive links are pathways by 
which the front end can send evaluation requests to the kernel, and 
the kernel can respond with results. The service link works in reverse, 
with the kernel sending requests to the front end.

などがあります。それが役立つかもしれません。また、同じ情報が 31 ページの PDF ファイルにあります。

http://www.wolfram.com/learningcenter/tutorialcollection/DynamicInteractivity/

カーネルとフロントエンドの間の実際のメッセージング プロトコルは、非常に高度なものでなければなりません。

于 2012-01-06T08:03:41.650 に答える