1

キューに入れられた後に値を変更する方法はありますか? たとえば、いくつかの変数を含むキューがある場合、最初の変数をキューにない他の値と合計できますか? これを行う最善の方法は次のようなものでしょうか。

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

または、最初にキューからオブジェクトを削除せずにそれを行う方法はありますか?

4

2 に答える 2

1

おそらく、キューではなく、multiprocessing.Value、multiprocessing.Arrayなどの共有値が必要です。キューはそれを許可していません。

于 2012-07-11T20:15:49.803 に答える
1

キューはこの方法でのアクセスを許可しません。まだキューにあるオブジェクトに直接アクセスしようとしていますが、これはキューの目的を無効にします。

あなたが探しているのは、キューの代わりに使用する deque オブジェクトだと思います (ここでそれについて読んでください: http://docs.python.org/library/collections.html#collections.deque )

deque オブジェクトはスレッドセーフであり、インデックス値を使用してそのメンバーに直接アクセスできる一方で、キューのように動作できます。ただし、両端キューの左端または右端にアクセスしない限り、ランダム アクセスの場合は遅くなるため、質問を正しく理解していれば、これは問題になりません。

ただし、両端キューへのランダム アクセスが多い場合は、代わりに multiprocessing.array を使用してください。

于 2012-07-11T20:30:06.950 に答える