A proxy object has methods which invoke corresponding methods of its referent (although not every method of the referent will necessarily be available through the proxy). A proxy can usually be used in most of the same ways that its referent can
但它没有说明原因或解决方法.我想知道是否有人知道这样做的方法.
这是我正在尝试做的一个小例子.
服务器:
from multiprocessing.managers import BaseManagerfrom Queue import Queueclass 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 selfclass QueueManager(BaseManager): passkeyhandler = 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 BaseManagerclass QueueManager(BaseManager): passQueueManager.register('keyhandler')manager = QueueManager(address=('',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__方法不起作用.我可以以某种方式强迫/解决这个问题吗?
解决方法 使用代理服务器.在客户端添加此类声明(以及导入BaseProxy):class KeyHandlerProxy(BaseProxy): _exposed_ = ('next','get') def __iter__(self): return self def next(self): o = self._callmethod('get') if object() == o: raise stopiteration return o
并将寄存器(客户端)更改为:
QueueManager.register('keyhandler',proxytype=KeyHandlerProxy)总结
以上是内存溢出为你收集整理的Python多处理传递引用全部内容,希望文章能够帮你解决Python多处理传递引用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)