我希望您能够实现多进程优先队列。我找到了这个答案: Python 2.7.6中使用多进程PriorityQueue的奇怪行为,作者是Dano。
在我实现后,我可以使用.get()和.put()函数来操作我的优先队列,但当我使用.queue来打印当前队列中的元素时,它会给出一个错误。
代码如下:
现在的输出是:-
我仍然无法获取队列中的元素,我阅读了有关register函数的method_to_typeid属性来映射exposed中提到的函数的返回类型的方法,但我不知道如何使用它。
有人可以帮助我吗?这样我就可以在不从队列中弹出元素的情况下打印队列的元素。
在我实现后,我可以使用.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]' 对象没有属性 'queue'
我看了一下 Python 的 SyncManager 文档,并修改了我的代码。
新的代码:
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>>
我仍然无法获取队列中的元素,我阅读了有关register函数的method_to_typeid属性来映射exposed中提到的函数的返回类型的方法,但我不知道如何使用它。
有人可以帮助我吗?这样我就可以在不从队列中弹出元素的情况下打印队列的元素。
queue
不是可调用的。因此,我们在使用queue
时不需要括号 (),无论是普通队列、多进程队列还是其他任何类型的队列。 - Arshad Ahmad