[解決済み】Queue.Queueとcollections.dequeの比較
質問
私は、複数のスレッドがものを置くことができ、複数のスレッドが読み取ることができるキューを必要としています。
Pythonには少なくとも2つのキュークラスがあります。
Queue.Queue
と
collections.deque
前者は後者を内部的に使用しているように見えます。どちらもドキュメントではスレッドセーフであると主張しています。
しかし、Queueのドキュメントにはこうも書かれている。
collections.dequeは 非限定キューの実装 高速なアトミックアペンド()と popleft() 操作 を使用しない ロックが必要です。
というのは、よく理解できないのですが。これはdequeが完全なスレッドセーフではないということでしょうか?
もしそうなら、私はこの2つのクラスの違いを十分に理解していないのかもしれません。Queueがブロッキング機能を追加していることはわかります。一方で、インオペレータのサポートなど、いくつかのdequeの機能が失われています。
内部のdequeオブジェクトに直接アクセスするのは
x in Queue().deque
スレッドセーフ?
また deque はスレッドセーフなのに、Queue はなぜ mutex を使っているのですか?
解決方法は?
Queue.Queue
と
collections.deque
は異なる目的で使用されます。Queue.Queue は異なるスレッドがキューに入れられたメッセージやデータを使って通信できるようにするためのものであり、一方
collections.deque
は、単にデータ構造として意図されています。そのため
Queue.Queue
のようなメソッドを持っています。
put_nowait()
,
get_nowait()
および
join()
一方
collections.deque
はしない。
Queue.Queue
はコレクションとして使用されることを意図していません。
in
演算子を使用します。
要するに、複数のスレッドがあり、それらのスレッドがロックなしで通信できるようにしたい場合、次のようなものが必要だということです。
Queue.Queue
データ構造としてキューやダブルエンド・キューが必要な場合は、以下のようにします。
collections.deque
.
最後に
Queue.Queue
は火遊びですからね、そんなことはしたくないでしょう。
関連
-
Python関数の高度な応用を解説
-
python call matlab メソッドの詳細
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
Python Pillow Image.save jpg画像圧縮問題
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
python implement mysql add delete check change サンプルコード
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない