2016-10-11 15 views
0

コードは以下Pyro4ピクルスシリアライザnumpyのアレイ

import numpy as np 
import Pyro4 

# set pickle serializer 
Pyro4.config.SERIALIZERS_ACCEPTED = set(['pickle','json', 'marshal', 'serpent']) 


@Pyro4.expose 
class test(object): 
    def get_array(self): 
     return np.random.random((10,10)) 


def main(): 
    # create a Pyro daemon 
    daemon = Pyro4.Daemon()  
    # register test instance 
    uri = daemon.register(test()) 
    # print uri to connect to it in another console 
    print uri 
    # start the event loop of the server to wait for calls 
    daemon.requestLoop()     

if __name__=="__main__": 
    main() 

今別のコンソールを開き、テストを呼び出すことを試みるある

TypeError: don't know how to serialize class <type 'numpy.ndarray'>. Give it vars() or an appropriate __getstate__ 

次のタイプのエラーを返します例を以下に示します。

import Pyro4 
Pyro4.config.SERIALIZERS_ACCEPTED = set(['pickle','json', 'marshal', 'serpent']) 
# connect to URI which is printed above 
# must be something like this 'PYRO:[email protected]:57495' 
p = Pyro4.Proxy(URI) 
p.get_array() 


Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/site-packages/Pyro4/core.py", line 171, in __call__ 
    return self.__send(self.__name, args, kwargs) 
    File "/usr/local/lib/python2.7/site-packages/Pyro4/core.py", line 438, in _pyroInvoke 
    raise data 
TypeError: don't know how to serialize class <type 'numpy.ndarray'>. Give it vars() or an appropriate __getstate 

答えて

1

これはマニュアルに記載されていますそれを見てください:http://pythonhosted.org/Pyro4/tipstricks.html#pyro-and-numpy

上記のコードでは、クライアントコードにpickleを使用するよう指示していませんでした。そのために別の設定項目を使用するべきです(SERIALIZER)。あなたが持っているものは、代わりにPyro deamonsのためのものです。

+0

私はこれまでここにいましたが、コード内から設定を変更し、PYRO_SERIALIZERS_ACCEPTEDシステムのグローバル設定変数を変更しません。私は愚かな質問を申し訳ありませんpyroに新しいです。 – Cobry

+2

すべての設定項目(ロギング関連を除く)は、環境変数またはコード変更の両方で設定できます。環境変数は、通常、システム全体ではなく、ユーザーごとであることに注意してください。とにかく、あなたはPyro4.config.SERIALIZER = 'pickle' –