7

私は、多数の非常に強力なコンピューターを備えたグリッド システムに取り組んでいます。これらを使用して、python 関数を非常に迅速に実行できます。私のユーザーは、ワークステーションでの計算に時間がかかる多数の python 関数を持っています。理想的には、リモートの強力なサーバーでいくつかの関数を呼び出すことができるようにしたいと考えていますが、ローカルで実行されているように見えます。

Python には「apply」という古い関数があります。Python が拡張呼び出し構文 (例: **arguments) をサポートしているため、最近ではほとんど役に立ちませんが、次のように機能するものを実装する必要があります。

rapply = Rapply( server_hostname ) # Set up a connection
result = rapply( fn, args, kwargs ) # Remotely call the function
assert result == fn( *args, **kwargs ) #Just as a test, verify that it has the expected value. 

fnRapply は、リモート サーバー上で任意のコード (文字通り何でもかまいません)をリモートで実行するために使用できるクラスである必要があります。rapply関数が返す結果を返します。「結果」は、関数をローカルで呼び出した場合と同じ値になるはずです。

ここで、それがユーザー提供の関数であると仮定しましょうfn。実行サーバーにネットワーク経由で送信する何らかの方法が必要です。fn が常に単純なものであることを保証できれば、Python ソース コードを含む文字列である可能性があります...しかし、それほど単純でない場合はどうでしょうか?

ローカルの依存関係がある場合fn: 別のモジュールで定義されたクラスを使用する単純な関数である可能性があります。カプセル化する方法と、標準ライブラリではないfnものを必要とするすべてのものはありますか? fn理想的なソリューションは、このシステムのユーザーが Python 開発について多くの知識を持っている必要がないことです。彼らは単に関数を書き、それを呼び出したいだけです。

明確にするために、クライアントとサーバー間の通信を実装するためにどのような種類のネットワーク プロトコルを使用するかについて議論することに興味はありません。私の問題は、関数とその依存関係を、シリアル化してリモートで実行できる単一のオブジェクトとしてカプセル化する方法です。

また、リモート サーバーで任意のコードを実行することによるセキュリティへの影響にも関心がありません。このシステムは純粋に研究目的であり、厳重にファイアウォールで保護された環境内にあるとだけ言っておきましょう。

4

6 に答える 6

8

PyRO (Python リモート オブジェクト)を見てみましょう。 これには、クラスター内のすべてのコンピューターにサービスをセットアップし、それらを直接、またはネーム サーバーとパブリッシュ/サブスクライブ メカニズムを介して間接的に呼び出す機能があります。

于 2009-02-11T14:56:50.957 に答える
4

次のことをしたいようです。

  • 共有ファイルシステム スペースを定義します。

  • すべての Python ソースをこの共有ファイルシステム スペースに配置します。

  • コードのブロックを「execfile」する単純なエージェントまたはサーバーを定義します。

  • その後、クライアント
    はコード ブロックを使用してエージェントに連絡します (POST メソッドを使用した REST プロトコルはこれに適しています)。エージェントはコード ブロックを保存し、execfileそのコード ブロックに対して を実行します。

すべてのエージェントが共通のファイル システムを共有するため、それらはすべて同じ Python ライブラリ構造を持ちます。

「バッチ サーバー」と呼ばれる単純な WSGI アプリケーションを使用します。リモート リクエストを作成およびチェックするための RESTful プロトコルがあります。

于 2009-02-11T11:38:18.343 に答える
2

スタックレスには、実行中のコードをピクルおよびアンピクルする機能がありました残念ながら、現在の実装はこの機能をサポートしていません。

于 2009-02-11T12:57:51.100 に答える
1

ParallelPythonのような既製のクラスタリングソリューションを使用できます。複数のリモートスレーブを比較的簡単に設定し、それらに対して任意のコードを実行することができます。

于 2009-02-11T14:21:54.190 に答える
0

構文:

猫./test.py | sshpass -p 'password' ssh user@remote-ip "python - script-arguments-if-any for test.py script"

1) ここで、「test.py」はローカルの python スクリプトです。2) ssh パスワードを ssh 接続に渡すために使用される sshpass

于 2015-06-16T05:20:41.327 に答える
0

リモート PC への SSH 接続を使用して、他のマシンでコマンドを直接実行できます。Python コードをマシンにコピーして実行することもできます。

于 2009-02-11T12:55:01.483 に答える