Python-IronPython-Jythonインタープリターの相互作用

このような問題を解決する必要がありました:異なるPythonインタープリター間でデータを交換する方法?! いくつかの解決策を見つけましたが、私の意見では、最も便利な解決策についてお話ししたいと思います。



アプローチの選択



手始めに、私は多くの中から最も便利なソリューションを選択しようとしました。 メッセージキュー、ソケット、およびRPCを正しく比較できない場合がありますが、私はタスクから来ました。 利用可能なものは次のとおりです。



TCPソケット


対話を行う最も簡単な方法であるソケットを使用すると、任意のデータを転送できますが、独自のプロトコルの実装でコードを飽和させる必要があります。 この道は厄介であり、間違いは避けられません。 結論:適切だが難しい。



ZeroMQライブラリ


非常に有望な開発ブローカーレスメッセージキュー。 pyzmqおよびpyzmq-staticライブラリとして実装されています。 最初のケースでは、Cで書かれた共有ライブラリであるZeroMQ自体をインストールする必要があります。 2番目のものには、すでにバイナリが含まれています。 それはすべて非常に面白く始まり、IronPythonに切り替えるまでコードは正常に機能しました...

PyzmqはIronPython用に実装されていませんが、問題ではありません。.NET統合があり、 clrzmq-.NETのバインディングを使用できます。 そしてここで問題が始まりました。 バイナリはVisualStudioのプラグイン(nuget)から入手できるため、ライブラリをコンパイルする必要がありました。ソースをダウンロードし、すべてがそこにあり、スクリプトはbuildコマンドでビルドされますが、それほど単純ではありません。 バージョン2はまったくコンパイルしませんでしたが、nugetを使用して依存関係を正しく解決しましたが(コミットが壊れた可能性がありますか?)、3ベータをコンパイルしましたが、チュートリアルの例を使用してもクラッシュしました)

その結果、バイナリ2もネットワークによって検出されましたが、これは私をまったく喜ばせませんでした。 すべてが機能しましたが、3-keのAPIが大きく変わったため、100回後にコードを書き換えたくありませんでした。 結論:良いが、純粋なPython以外の生。



パイロ、火をつけろ!


最初は、0mqを終了することにしましたが、 Pyroのようなライブラリの存在を思い出しました。Pyroは、90年代の危機からのライブラリで、順調に発展しています。 利点のすべてをリストするわけではありませんが、興味があるのは通訳の相互作用だけです。 すぐに、 チュートリアルの例を試しますが、異なるインタープリターですべてを実行するという違いがあります(コードは変更されず、ニックネームを入力しただけです)。



ちなみに、Jythonの下でネームサーバーを起動します。ここに、最初の大きなプラスがあります。0mqでは、ネームサーバーはまだ完了していません。



わあ! 起動しました...



次に、IronPythonで実行するサーバーを登録します。



登録は成功しました。



次のステップは、クライアントを起動することです。 私たちは古典的なPythonの下でそれを行います(一度にたくさん持っていますが、EPDを始めました):



いいね! すべてがうまくいきました。



漬物バージョン


オプションとして、Python 3でパーツの1つを実行しようとしました。ハックなしでは機能しませんでした。(後者は3番目のバージョンのpickleを使用します+最新バージョンでは、この欠陥を回避し、Python 3をIronPython 2およびJython 2に接続する方法を次に示します。

import pickle pickle.HIGHEST_PROTOCOL = 2
      
      





これは、Pyroをインポートする前にクライアントコードに追加する必要があります。 すべてがうまくいきました:



64ビットPython 3の使用に注意してください。



ところで、オプションとして、 パイロライトライブラリを使用して、Pythonインタープリターなしで.NETまたはJavaから直接接続できます。 これは実際にはミニピクルスです。



一般に、Pyroを使用したソリューションはこれまで他のソリューションよりも好まれてきましたが、システムにさまざまなバージョンのコンポーネントが多数含まれている場合は、おそらく0mqを使用する方が有利です。 まだPyro4に焦点を当てていますが。



All Articles