Mathematica 9 is now available

Documentation / Mathematica / Mathematicaブック / Mathematicaの仕組み / MathLinkと外部プログラム通信 /

2.13.6 MathLinkを使ったMathematicaセッション間の通信

Mathematicaセッション間の MathLinkコネクション

セッション A

8000番のポートでリンクをスタートさせる.

In[1]:= link = LinkCreate["8000"]

Out[1]=LinkObject[8000@frog.wolfram.com, 4, 4]

セッション B

8000番ポートのリンクと接続する.

In[1]:=Link = LinkConnect["8000"]

Out[1]=LinkObject["8000@frog.wolfram.com", 4, 4]

セッション A

15!を評価し,リンクにそれを書き込む.

In[2]:=LinkWrite[link, 15!]

セッション B

リンクから読み出すと送信した 15!が得られる.

In[2]:=LinkRead[link]

Out[2]=1307674368000

リンクにデータを書き戻す.

In[3]:=LinkWrite[link, N[%^6]]

セッション A

セッションBで書き込んだデータを読み 出す.

In[3]:=LinkRead[link]

Out[3]=

MathLinkコネクションを使えば, Mathematicaセッション間の中間ファイルを使わないデータ転送が可能になる.

その他の使い道としては,計算の一部を別のセッションに送ることがある.

セッション A

2 + 2を評価せずにリンクに書き込む.

In[4]:=LinkWrite[link, Unevaluated[2 + 2]]

セッション B

リンクから式を読み出し,即座に Holdで包み込む.

In[4]:=LinkRead[link, Hold]

Out[4]=Hold[2 + 2]

式を評価する.

In[5]:=ReleaseHold[%]

Out[5]=4

LinkWriteを呼び出すと,LinkWriteは式を MathLinkコネクションに書き込んだあと,直ちにリターンする.しかし,LinkRead MathLinkコネクションから式を完全に読み出すまでリターンしない.

読出しが可能かどうかを LinkReadyQ[link]の呼出しで知ることができる.LinkReadyQ Trueを返したら,安全に LinkReadを呼び出し,式を読み込むことができる. LinkReadyQ Falseを返した場合, LinkReadは読み出すべき式をもう一方の Mathematicaセッションの LinkWriteが書き込むまでブロック する.

セッション A

読まれるべきものがリンク 上にない. LinkReadが呼ばれると,ブロッ クする.

In[5]:=LinkReadyQ[link]

Out[5]=False

セッション B

リンクに式を書く.

In[6]:=LinkWrite[link, x + y]

セッション A

読出しを待っている式がリンク上に存在する.

In[6]:=LinkReadyQ[link]

Out[6]=True

LinkReadをブロックされる恐れなしに呼び出すことができる.

In[7]:=LinkRead[link]

Out[7]=x + y

MathLinkのリンクを設定する方法

コンピュータシステムがサポートしていれば,いかなるプログラム間通信のメカニズムでもMathLinkは利用することができる.並列する Mathematicaセッション間のコネクションを確立するには,インター ネットのTCPポートを利用することが最も一般的である.

ほとんどのコンピュータシステムには利用可能なポートが数千個あり,そのうちのいくつかは標準的なサービスにすでに利用されている.

未使用のポートは MathLinkコネクションに使うことができる.

frog.wolfram.com上のセッション

frog.wolfram.comが使用していないポートを見付ける.

In[8]:=link = LinkCreate[ ]

Out[8]=LinkObject["2981@frog.wolfram.com", 5, 5]

toad.wolfram.com上のセッション

そのポートに接続する.

In[7]:=link = LinkConnect["2981@frog.wolfram.com"]

Out[7]=LinkObject["2981@frog.wolfram.com", 5, 5]

マシン名をリンク上で転送する.

In[8]:=LinkWrite[link, $MachineName]

frog.wolfram.com上のセッション

toadが書いた式を読む.

In[9]:=LinkRead[link]

Out[9]=toad

インターネットのポートを MathLinkコネクションに利用すれば,異なるMathematicaセッション間でのデータ転送を簡単に行うことができる.インターネットのコネクションが転送を実行するマシン間にあればよい.

MathLinkは全くシステムに依存していないため, MathLinkコネクションの両端のコンピュータが同一の種類である必要はない.ただし,実際のリンクでは,コンピュータの機種の違いからくるデータ形式の違い等に対処するために MathLink内で転送処理に対する最適化が図られる.



Any questions about topics on this page? Click here to get an individual response.Buy NowMore Information
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.