Я хотел реализовать приоритет многопроцессорной обработки.Я нашел этот ответ: - Странное поведение Queue.PriorityQueue с многопроцессорной обработкой в Python 2.7.6
от Dano
После того, как я это реализовал.Я мог бы использовать функции .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'
Я прочитал документацию по 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>>
Я все еще не получаю элементы в очереди, я прочитал об атрибуте method_to_typeid
функции register, чтобы отобразить тип возвращаемого значения функций, упомянутых в exposed
, но я не знаюкак это использовать.
Может ли кто-нибудь помочь мне с этим, чтобы я мог печатать элементы очереди, не выталкивая их из очереди