0

Python を使用して RPC 呼び出しを行う方法を理解しようとしています。クラスを定義し、そのクラスのインスタンスを作成するメソッドを公開する愚かなサーバーがあります。

# server.py
class Greeter(object):
    def __init__(self, name):
        self.name = name
    def greet(self):
        return "Hi {}!".format(self.name)

def greeter_factory(name):
    return Greeter(name)

some_RPC_framework.register(greeter_factory)

のインスタンスを取得したいクライアントGreeter:

# client.py
greeter_factory = some_RPC_framework.proxy(uri_given_by_server)

h = greeter_factory("Heisemberg")
print("Server returned:", h.greet())

問題は、ユーザー定義オブジェクトのインスタンスを返すことを許可するフレームワーク、またはオブジェクトの属性を持つ dict のみを返すフレームワーク (たとえば、Pyro4) を見つけられなかったことです。

以前は Java RMI を使用していました。この場合、必要に応じて、クライアントがコンパイル済みのクラスをダウンロードできるサーバー上のコードベースを指定できます。Pythonにこのようなものはありますか?クライアントがクラスの完全に機能するインスタンスを持つことができるように、オブジェクトをクラスのバイトコードと一緒にシリアル化できるフレームワークでしょうか?

4

2 に答える 2

0

Pyro はこれをある程度行うことができます。デフォルトのシリアライザーを使用する場合、カスタム クラス (デ) シリアライザーを登録できます。または、pickle シリアライザーを使用することもできますが、これには重大なセキュリティ上の影響があります。http://pythonhosted.org/Pyro4/clientcode.html#serializationを参照してください

pickle シリアライザを使用している場合でも、Pyro が実行しないことは、モジュール定義を構成する実際のバイトコードを転送することです。あなたの場合、クライアントは、クラスを定義するモジュールを通常の方法でインポートできる必要があります。コード転送はありません。

于 2015-01-14T00:02:17.783 に答える