複数のスレッドが物を入れることができ、複数のスレッドが読み取ることができるキューが必要です。
Python には少なくとも 2 つのキュー クラスと がQueue.Queue
ありcollections.deque
、前者は後者を内部的に使用しているようです。どちらもドキュメントでスレッドセーフであると主張しています。
ただし、キューのドキュメントにも次のように記載されています。
collections.deque は、ロックを必要としない高速のアトミックな append() および popleft() 操作を備えた無制限キューの代替実装です。
私はよく理解していないと思います:これは、dequeが完全にスレッドセーフではないことを意味しますか?
もしそうなら、私は 2 つのクラスの違いを完全には理解していないかもしれません。Queue がブロッキング機能を追加していることがわかります。一方、インオペレーターのサポートなど、いくつかの deque 機能が失われます。
内部dequeオブジェクトに直接アクセスすることは、
x in Queue().deque
スレッドセーフ?
また、deque が既にスレッドセーフであるのに、なぜ Queue はその操作にミューテックスを使用するのですか?