Python多处理传递引用

2024-09-29 23:21:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用multiprocessing模块在进程之间传递一个自定义Queue。问题是我没有把所有的方法都用到另一边。根据文件。在

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 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()

客户:

^{pr2}$

回溯:

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__方法不行。我可以强制/解决这个问题吗?在


Tags: ofthe方法inselfobjectserverqueue
1条回答
网友
1楼 · 发布于 2024-09-29 23:21:35

使用代理。在客户端上添加这个类声明(以及导入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

并将register(客户机的)更改为:

^{pr2}$

相关问题 更多 >

    热门问题