WSTPを使ったWolframシステムセッション間の通信
LinkCreate["name"] | 別プログラムと通信するためのリンクを作成する |
LinkConnect["name"] | 別プログラムで作成されたリンクと接続する |
LinkClose[link] | WSTP接続を閉じる |
LinkWrite[link,expr] | 式をWSTP接続に書き込む |
LinkRead[link] | WSTP接続から式を読み出す |
LinkRead[link,Hold] | 式を読み出し,即座にその式をHoldで包み込む |
LinkReadyQ[link] | リンクに読出し可能なデータがあるかどうかをチェックする |
LinkReadyQ[link,t] | 式が読む準備ができているかどうかを調べるのに t 秒まで待つ |
LinkReadyQ[{link1,link2,…}] | リンクのうちのひとつから読む準備のできたデータがあるかどうかを調べる |
LinkReadyQ[{link1,link2,…},t] | 式が読む準備ができているかどうかを調べるのに t 秒まで待つ |
セッション A
セッション B
セッション A
セッション B
セッション A
セッション A
セッション B
リンクから式を読み出し,即座にHoldで包み込む:
リンクがLinkWrite,LinkRead,LinkActivateのいずれかへの完了した呼出しを介してアクティベートされた場合,式はバッファに書き出される.式全体がバッファにフィットする場合,LinkWriteは対応するLinkReadを必要とすることなく直ちに戻る.しかし,LinkReadを呼び出すと,これはWSTP接続から式を完全に読み出すまで戻らない.
読出しが可能かどうかをLinkReadyQ[link]の呼出しで知ることができる.LinkReadyQがTrueを返したら,安全にLinkReadを呼び出し,式を読み込むことができる.LinkReadyQがFalseを返した場合,LinkReadは読み出すべき式をもう一方のWolframシステムセッションのLinkWriteが書き込むまでブロックする.
セッション A
読まれるべきものがリンク上にない.LinkReadが呼ばれると,ブロックする:
セッション B
セッション A
LinkReadをブロックされる恐れなしに呼び出すことができる:
LinkReadyQはリンクオブジェクトのリストを取り,読むデータがあるかどうかを判断するために各リンクを並列で評価することができる.単独のリンクの場合のように,第2引数でタイムアウトの周期を指定するため,LinkReadyQはリンクのいずれかが使う準備ができるまで待つことになる.
LinkCreate[LinkProtocol->"TCPIP"] | コンピュータが使用していないポートを取得する |
LinkCreate["number",LinkProtocol->"TCPIP"] | |
特定のポートを使用する | |
LinkConnect["number",LinkProtocol->"TCPIP"] | |
同一コンピュータのポートに接続する | |
LinkConnect["number@host",LinkProtocol->"TCPIP"] | |
別のコンピュータのポートに接続する |
コンピュータシステムがサポートしていれば,いかなるプログラム間通信のメカニズムでもWSTPは利用することができる.並列するWolframシステムセッション間の接続を確立するには,インターネットのTCPポートを利用することが一般的である.
frog.wolfram.com上のセッション
toad.wolfram.com上のセッション
frog.wolfram.com上のセッション
WSTPは全くシステムに依存していないため,WSTP接続の両端のコンピュータが同一の種類である必要はない.ただし,実際のリンクでは,コンピュータの機種の違いからくるデータ形式の違い等に対処するためにWSTP内で転送処理に対する最適化が図られる.