Есть ли способ изменить значения после того, как они были помещены в очередь? Например, если у меня есть очередь, в которой есть пара переменных, могу ли я суммировать первую переменную с каким-либо другим значением, которого нет в очереди? Лучше всего сделать это примерно так:
x = queue.get()
queue.put(x+some_value)
Или есть способ сделать это без предварительного удаления объекта из очереди?
Ответ 1 · рейтинг 1 · jfs
Вероятно, вам нужны общие значения, такие как multiprocessing.Value, multiprocessing.Array, а не queue. Очередь этого не позволяет.
Ответ 2 · рейтинг 1 · Atra Azami
Очередь не разрешает доступ таким образом; вы запрашиваете прямой доступ к объекту, который все еще находится в очереди, что противоречит цели очереди.
Я думаю, что вы, возможно, ищете объект deque для использования вместо очереди (читайте об этом здесь: http://docs.python.org/library/collections.html#collections.deque)
Объект deque является потокобезопасным и может вести себя как очередь, при этом разрешая доступ напрямую к своим членам со значением индекса. Однако это медленнее для произвольного доступа, если вы не обращаетесь к левому или правому концу двухсторонней очереди, поэтому, если я правильно понял ваш вопрос, это не должно быть проблемой в вашем случае.
Однако если у вас много случайных обращений к двухсторонней очереди, просто используйте вместо этого multiprocessing.array.