【发布时间】:2018-12-04 13:00:57
【问题描述】:
我想实现多处理优先队列。 我找到了这个答案:- Strange Queue.PriorityQueue behaviour with multiprocessing in Python 2.7.6
在我实现了这个之后。我可以为我的优先队列使用 .get() 和 .put() 函数,但是当我使用 .queue 打印队列中的当前元素时,它给了我一个错误
代码:-
class MyManager(SyncManager):
pass
def get_manager():
MyManager.register("PriorityQueue", PriorityQueue) # Register a shared PriorityQueue
m = MyManager()
m.start()
return m
m = get_manager()
call= m.PriorityQueue()
for i in range(5):
call.put(i)
print(call.queue)
错误:AttributeError: 'AutoProxy[PriorityQueue]' object has no attribute 'queue'
我阅读了 SyncManager 的 python 文档并修改了我的代码。
新代码:-
class MyManager(SyncManager):
pass
def get_manager():
MyManager.register("PriorityQueue", PriorityQueue,exposed=['put','get','queue']) # Register a shared PriorityQueue
m = MyManager()
m.start()
return m
m = get_manager()
call= m.PriorityQueue()
for i in range(5):
call.put(i)
print(call.queue)
现在的输出是:-
<bound method AutoProxy[PriorityQueue].queue of <AutoProxy[PriorityQueue] object, typeid 'PriorityQueue' at 0x7ff3b48f2dd0>>
我仍然没有得到队列中的元素,我阅读了关于注册函数的method_to_typeid 属性来映射exposed 中提到的函数的返回类型,但我不知道如何使用它。
有人可以帮我解决这个问题,这样我就可以打印队列的元素而不用从队列中弹出它们
【问题讨论】:
-
queue似乎是一个方法,所以你需要调用它。试试call.queue()(如果它需要任何参数,它可能会给你另一个错误)。 -
queue不可调用。所以我们不需要括号 () 和queue,无论是普通队列、多处理队列还是任何其他类型的队列
标签: python multiprocessing priority-queue