私は、Pythonの組込み型は一般にスレッドセーフではないことを知っていますが、thisは、競合する2つのスレッドからpop()を呼び出すことは安全だと主張しています。もちろん、例外が発生する可能性がありますが、データは破損していません。この主張を検証する文書を見つけることができないようです。本当ですか?ドキュメンテーション、してください!Pythonでは、set.pop()はthreadsafeですか?
答えて
set.pop
method in the CPython sourceを見ると、GILがリリースされないことがわかります。
これは、CPythonプロセス内で一度に1つしか発生しないことを意味します。つまり、set.pop
は1度に発生します。
set.pop
checks if the set is empty以降、空のセットからポップしようとすると、IndexError
以外は何も起こりません。
いいえ、CPythonを使用して複数のスレッドのセットからデータを破棄することはできません。
すぐに問題が解決するので、この回答を受け入れてください。 fffuuuutttuuuurreeからの読者への注意:@Niklas(上記)からのコメントに注意してください。 –
2つのスレッドが同じ値をポップできないという意味で、アトミックであるために「ポップ」操作がスレッドセーフであると考えています。
たとえば、別のスレッドがそのコレクションを反復していると、その動作に依存しません。
いずれの具体的なドキュメントも見つかりませんでしたが、この方向を指すトピックがいくつかあります。 Pythonの公式文書は実際にこの種の情報に役立ちます。
私の答えのソースリンクを確認してください。 CPythonでは、 'set.next'と' set.pop'の両方を同時に実行することはできません。最悪の場合は、シーケンス内の項目を 'it 'loop - アイテムをスキップします。 – agf
- 1. java.util.concurrent.Future threadsafeですか?
- 2. hadoopの仕事はThreadSafeですか?
- 3. NSUserDefaults threadsafe
- 4. @GuardedBy、@ThreadSafe、@ NotThreadSafe
- 5. Threadsafe java servlet
- 6. Form.Show()とForm.Visible ThreadSafe
- 7. エラーGoogle App EngineのPython 2.7 - CGIハンドラでThreadsafeを有効にできません
- 8. CWnd :: GetSafeHwnd()とCWnd :: m_hWnd ThreadSafeはありますか?
- 9. JAVAの "threadsafe"修飾子はありますか?
- 10. 静的メソッドとThreadSafeアプリケーション
- 11. はPythonスレッドセーフで+ =ですか?
- 12. Pythonでは 'input'はキーワードですか?
- 13. Pythonでは、グローバルステートメントとは何ですか?
- 14. Pythonでは "\ 00"とは何ですか?
- 15. は、PythonはPythonで
- 16. pythonのdate.toordinal()の逆はどうですか? Pythonでは、
- 17. このデュークはPythonでスレッドセーフですか?
- 18. pythonで 'set.intersection()'のアルゴリズムは何ですか?
- 19. Pythonライブラリモジュールは#!/ usr/bin/env pythonで始めるべきですか?
- 20. はPythonでリストから
- 21. Python 3.xのsuper()魔法はなぜですか? Pythonの3.xでは
- 22. Python classmethods:インスタンスのメンバとクラスのメンバの違いは何ですか? Pythonでは
- 23. Pythonのstring.join()はPythonで
- 24. スレッドはPythonで
- 25. はpythonで
- 26. Pythonは大文字と小文字を区別しますか? Pythonでは '#'はコメントシンボルですか?
- 27. pythonでtempfile.NamedTemporaryFileのumaskを設定することはできますか? Pythonで
- 28. BDB for Pythonとは何ですか?
- 29. pythonバインディングはどうですか?
- 30. Pythonの式とは何ですか?
Pythonのソースコードを見ると、 'set'オブジェクトはいくつかの便利なメソッドを持つ単なる辞書です。 – Blender
私はあなたが指摘しているものの下でexaclyです[あなたが探している答え](http://stackoverflow.com/a/2227210/1132524)と思います。コメントを読み、[GIL](http://wiki.python.org/moin/GlobalInterpreterLock)が何であるかを確認してください。 –
あなたがリンクしている同じ質問は、変更可能な型はスレッドセーフではないことを示しています:http://stackoverflow.com/a/2227220/104847競合状態がないようにロック機構を実装する必要があります。 – Ale