|概要ネットワーク上の複数のホストが協調して動作するようなプログラムの実験をやろうとすると、サーバープロセスをあらかじめ起動しておいたり、サーバー側のプログラムを更新したら適宜デプロイしないといけないのは以前から面倒だと思っていたのですが、以下のやり方で解決できることを知りました。2.6からサポートされたmultiprocessingという「プロセス間通信をPythonのマルチスレッド処理と同じAPIでラップするモジュール」に興味があって実装や使用例を調べているうちに見つけました。具体的には以下の部分です。sys.stdin.close()SSHで接続可能なホストに接続し、パイプでつながれた標準入出力を介して、リモートからローカルへ「プログラムが転送・展開された一時ディレクトリの情報」を、ローカルからリモートへ「リモートからローカルへ接続を確立するために必要な情報」を送っています。このようにすることで、プログラムのデプロイも通信もすべてローカルホストを起点に、ホスト間の通信をブートストラップ出来ます。これはいろんな局面で応用出来そうです。この業界では普通に使われてるテクニックな気もするのですが、何か名前があるのでしょうか。名前をつけるとしたら、なんとなくTrackbackみたいなイメージなのでConnect-backとかですかね。確認のためにこのテクニックを使ったエコーサーバーを書いてみました。以下のコードではサーバー(ローカル)が待ち受けするポート番号は0番を指定していて、実際は空いているポートが適当に選ばれるのですが、これをクライアント(リモート)に、パイプでつながれた標準入出力を介して伝えています。Gistsがこっそり使えるようになっていたんですね。自分で書いたコードに関しては、スーパーpre記法よりもコードのメンテナンスが楽でいいかもしれません。元のGistをupdateすると、コードを貼り付けた先々でも自動的に同期がとられるのも便利です。Gist、どなたかにTwitterで教えていただいたのだが失念してしまいました(すいません)。Twitter周りの検索は公式は日本語の検索に問題があったり、有志によるものはログに抜けがあったりしてこういうときに困ります。