Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Изменить переменные в многопроцессорной очереди

Автор вопроса: user1423020Ответов: 2

Есть ли способ изменить значения после того, как они были помещены в очередь? Например, если у меня есть очередь, в которой есть пара переменных, могу ли я суммировать первую переменную с каким-либо другим значением, которого нет в очереди? Лучше всего сделать это примерно так:

x = queue.get()
queue.put(x+some_value)

Или есть способ сделать это без предварительного удаления объекта из очереди?

  • есть ли конкретная причина, по которой вам нужно использовать очередь? почему бы вместо этого не использовать список, тогда вы можете легко изменить значения на месте. EEP 12.07.2012

python

Ответы

Ответ 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.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы