モジュールQueue
を使用してプロセス間でカスタムを渡そうとしています。multiprocessing
問題は、すべてのメソッドが反対側に届いていないことです。ドキュメントによると。
プロキシ オブジェクトには、その参照対象の対応するメソッドを呼び出すメソッドがあります (ただし、参照対象のすべてのメソッドが必ずしもプロキシを介して使用できるわけではありません)。プロキシは、通常、その参照対象が使用できる方法とほとんど同じ方法で使用できます。
しかし、その理由や回避方法については言及されていません。誰かがこれを行う方法を知っているかどうか疑問に思っています。
これが私がやろうとしていることの小さな例です。
サーバ:
from multiprocessing.managers import BaseManager
from Queue import Queue
class KeyHandler(Queue):
def __init__(self, elements=[]):
Queue.__init__(self)
for element in elements:
self.put(element)
def __iter__(self):
return iter(self.get, object())
def __call__(self):
return self
class QueueManager(BaseManager):
pass
keyhandler = KeyHandler(range(10))
QueueManager.register('keyhandler', callable=keyhandler)
manager = QueueManager(address=('', 50000), authkey='foobar')
server = manager.get_server()
server.serve_forever()
クライアント:
from multiprocessing.managers import BaseManager
class QueueManager(BaseManager):
pass
QueueManager.register('keyhandler')
manager = QueueManager(address=('', 50000), authkey='foobar')
manager.connect()
keyhandler = manager.keyhandler()
for elem in keyhandler:
print elem
トレースバック:
Traceback (most recent call last):
File "client2.py", line 14, in <module>
for elem in keyhandler:
TypeError: 'AutoProxy[keyhandler]' object is not iterable
メソッドは__call__
機能しますが、__iter__
メソッドは機能しません。これを何らかの方法で強制/回避できますか?