0

サイズが特定のしきい値を超えたときに、Pyro4 サーバー (バージョン 4.39、serializer= pickle) から単純な numpy 配列を取得する際に問題があります。サーバーはリクエストを処理して返信しますが、クライアントはハングしたままです

コードは以下のとおりです。

サーバーコード:

   import numpy as np, Pyro4

   class U(object):
       def __init__(self):
           self.Data = np.arange(10000000).reshape(200,50000)
           print self.Data.shape

       def get(self,name):
           print '%s Requested' % name
           return self.Data


   def run():
       Uni         = U()
       daemon      = Pyro4.Daemon(host='localhost')
       ns          = Pyro4.locateNS()
       uri         = daemon.register(Uni)
       ns.register("test",uri)
       print 'Up and waiting ...'
       daemon.requestLoop()

   if __name__ == '__main__':
       run()

クライアントコード:

   import Pyro4
   ns = Pyro4.locateNS()
   uri = ns.lookup('test')
   U=Pyro4.Proxy(uri)
   Data = U.get('Data')

サーバー出力: (200, 50000) アップおよび待機中 ... データが要求されました

そのため、Pyro サーバーはクライアントからのリクエストを処理してデータを返しているように見えますが、クライアントはそれを取得せず、メッセージの受信を無期限に待機したままになります。

PS: - 小さいサイズの配列 (200,5000) に対して同じコードが機能します。

何が問題なのか考えている人はいますか?

あなたの助けは大歓迎です、

4

1 に答える 1

0

実行すると、クライアントが停止します

Traceback (most recent call last):
  File "client.py", line 5, in <module>
    Data = U.get('Data')
  File "C:\python34\lib\site-packages\Pyro4\core.py", line 171, in __call__
    return self.__send(self.__name, args, kwargs)
  File "C:\python34\lib\site-packages\Pyro4\core.py", line 426, in _pyroInvoke
    raise data
TypeError: don't know how to serialize class <class 'numpy.ndarray'>. Give it vars() or an appropriate __getstate__
于 2015-10-06T13:29:34.437 に答える