python多处理共享队列目录
我试图在Python多处理中实现一个并行优先级队列。我使用的数据结构是队列的排序Dict。因此,要获取第一个元素,我只需获取最高优先级的密钥并返回与其关联的队列 我很难将其应用到多处理框架中。通过使用BaseProxy和BaseManager扩展sortedcontainers SortedAct类,我得到了一个共享的排序字典对象。但是,我不确定如何设置排序字典中的multiprocessing.Queue对象 以下是我目前掌握的情况:python多处理共享队列目录,python,queue,multiprocessing,Python,Queue,Multiprocessing,我试图在Python多处理中实现一个并行优先级队列。我使用的数据结构是队列的排序Dict。因此,要获取第一个元素,我只需获取最高优先级的密钥并返回与其关联的队列 我很难将其应用到多处理框架中。通过使用BaseProxy和BaseManager扩展sortedcontainers SortedAct类,我得到了一个共享的排序字典对象。但是,我不确定如何设置排序字典中的multiprocessing.Queue对象 以下是我目前掌握的情况: from multiprocessing import P
from multiprocessing import Process, Manager, Queue
from multiprocessing.managers import BaseManager, BaseProxy
from sortedcontainers import SortedDict
from multiprocessing.managers import BaseManager
class PriorityQueueClass(SortedDict):
pass
class PriorityQueueProxy(BaseProxy):
_exposed_ = ('__len__', '__setitem__', '__getitem__', 'peekitem')
def __len__(self):
return self._callmethod('__len__')
def __getitem__(self, tuple):
return self._callmethod('__getitem__', tuple)
def __setitem__(self, tuple):
key, item = tuple
queue = Queue()
queue.put(item)
return self._callmethod('__setitem__', (key, queue))
def peekitem(self, tuple=(0,)):
return self._callmethod('peekitem', tuple)
class MyManager(BaseManager):
pass
MyManager.register('PriorityQueue', PriorityQueueClass, PriorityQueueProxy)
if __name__ == '__main__':
manager = MyManager()
manager.start()
pq = manager.PriorityQueue()
pq.__setitem__((1, 2))
pq.__setitem__((0, 2))
pq.__getitem__(0)
这引发了一个例外:
RuntimeError: Queue objects should only be shared between processes through inheritance
相当确定的是,这是因为我正在尝试初始化我的
\uuuu setitem\uuuu
中的一个管理器,以初始化进程安全队列。不清楚该如何做/如果可能的话您找到解决方案了吗?您找到解决方案了吗?