Wolfram ResearchProductsPurchasingServices & ResourcesAbout UsOur Sites
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.

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


 © 2008 Wolfram Research, Inc.  Terms of Use  Privacy Policy |
Sign up for our newsletter: