-1

Pyro 接続で math.sqrt を送信できますが、自分で定義した関数を Pyro 接続で送信できません。

実行すると、Pickle Function エラーが発生します。

受信モジュールと送信モジュールの両方に関数が定義されています。

Pyro.core.initClient()
    connection = Pyro.core.getProxyForURI("PYRONAME://HelloWOlrd")

print connection.makeRequest(my_function)

そして私の受信側では:

def makeRequest(self, function):
    return function(9)

繰り返しますが、接続を介して math.sqrt 関数を送信すると、予期される 3 が出力されますが、作成した関数を送信しようとすると、ピクル エラーが発生します。

cPickle.PicklingError: ピクルできません: 属性ルックアップ組み込み.function に失敗しました

ここでも、受信側モジュールと送信側モジュールの両方に、名前空間で定義された関数があります。

この問題を解決する方法を知っている人はいますか?

4

1 に答える 1

1

クラスメソッドをピクルすることはできません。それに関する拡張リクエストがありますhttp://bugs.python.org/issue9276

選択できるオブジェクトについては、そこを参照して、コードを適切に変更してください。

于 2013-10-26T15:15:04.243 に答える