MathLink を使った Mathematica セッション間の通信
Mathematica セッション間のMathLink コネクション
セッション A
| Out[1]= |  |
セッション B |
| Out[2]= |  |
セッション A |
| Out[4]= |  |
|
| Out[6]= |  |
|
MathLink コネクションを使えば,
Mathematica セッション間の中間ファイルを使わないデータ転送が可能になる.
その他の使い道としては,計算の一部を別のセッションに送ることがある.
セッション A
リンクから式を読み出し,即座に Holdで包み込む.
| Out[8]= |  |
|
| Out[9]= |  |
|
LinkWriteを呼び出すと,式を
MathLink コネクションに書き込んだ後,直ちに戻る.しかし,
LinkReadは
MathLink コネクションから式を完全に読み出すまで戻らない.
読出しが可能かどうかを
LinkReadyQ[link]の呼出しで知ることができる.
LinkReadyQが
Trueを返したら,安全に
LinkReadを呼び出し,式を読み込むことができる.
LinkReadyQが
Falseを返した場合,
LinkReadは読み出すべき式をもう一方の
Mathematica セッションの
LinkWriteが書き込むまでブロックする.
セッション A
| Out[10]= |  |
セッション B |
| Out[12]= |  |
|
| Out[13]= |  |
|
LinkReadyQはリンクオブジェクトのリストを取り,読むデータがあるかどうかを判断するために各リンクを並列で評価することができる.単独のリンクの場合のように,第2引数でタイムアウトの周期を指定するため,
LinkReadyQはリンクのいずれかが使う準備ができるまで待つことになる.
| LinkCreate[LinkProtocol->"TCPIP"] | コンピュータが使用していないポートを取得する |
| LinkCreate["number",LinkProtocol->"TCPIP"] |
| 特定のポートを使用する |
| LinkConnect["number",LinkProtocol->"TCPIP"] |
| 同一コンピュータのポートに接続する |
| LinkConnect["number@host",LinkProtocol->"TCPIP"] |
| 別のコンピュータのポートに接続する |
TCP/IPでMathLink のリンクを設定する方法
コンピュータシステムがサポートしていれば,いかなるプログラム間通信のメカニズムでも
MathLink は利用することができる.並列する
Mathematica セッション間のコネクションを確立するには,インターネットのTCPポートを利用することが一般的である.
ほとんどのコンピュータシステムには利用可能なポートが数千個あり,そのうちのいくつかは標準的なサービスにすでに利用されている.
未使用のポートは
MathLink コネクションに使うことができる.
frog.wolfram.com上のセッション
frog.wolfram.comが使用していないポートを見付ける.
| Out[14]= |  |
toad.wolfram.com上のセッション |
frog.wolfram.comのポートに接続する.
| Out[15]= |  |
|
| Out[17]= |  |
|
インターネットのポートを
MathLink コネクションに利用すれば,異なる
Mathematica セッション間でのデータ転送を簡単に行うことができる.インターネットのコネクションが転送を実行するマシン間にあればよい.
MathLink は全くシステムに依存していないため,
MathLink コネクションの両端のコンピュータが同一の種類である必要はない.ただし,実際のリンクでは,コンピュータの機種の違いからくるデータ形式の違い等に対処するために
MathLink 内で転送処理に対する最適化が図られる.