私は、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. はpython dict.items()threadsafeですか?
- 2. java.util.concurrent.Future threadsafeですか?
- 3. hadoopの仕事はThreadSafeですか?
- 4. NSUserDefaults threadsafe
- 5. ThreadSafe Parallel.For
- 6. @GuardedBy、@ThreadSafe、@ NotThreadSafe
- 7. Form.Show()とForm.Visible ThreadSafe
- 8. Google App Engine ThreadSafe
- 9. Threadsafe java servlet
- 10. エラーGoogle App EngineのPython 2.7 - CGIハンドラでThreadsafeを有効にできません
- 11. CWnd :: GetSafeHwnd()とCWnd :: m_hWnd ThreadSafeはありますか?
- 12. C#threadsafeのBouncyCastleのSecureRandomはありますか?
- 13. JAVAの "threadsafe"修飾子はありますか?
- 14. 静的メソッドとThreadSafeアプリケーション
- 15. WebSocket Threadsafeを閉じる
- 16. スレッドが独立したインデックス範囲を読み書きする場合、std :: vector threadsafeは安全ですか?
- 17. はPythonスレッドセーフで+ =ですか?
- 18. Pythonでは、グローバルステートメントとは何ですか?
- 19. Pythonでは 'input'はキーワードですか?
- 20. Pythonでは "\ 00"とは何ですか?
- 21. pythonのdate.toordinal()の逆はどうですか? Pythonでは、
- 22. PythonのPythonとは何ですか?
- 23. python matplotlib.pyplotはグローバルスコープですか?
- 24. "$ python"とは何ですか?
- 25. Pythonソケットオブジェクトはスレッドセーフですか?
- 26. は、PythonはPythonで
- 27. PythonではGtk.Widget.destroy()が必要ですか?
- 28. pythonで 'set.intersection()'のアルゴリズムは何ですか?
- 29. Pythonで@staticmethodのポイントは何ですか?
- 30. Pythonスクリプトで%{__ python34}とは何ですか?
Pythonのソースコードを見ると、 'set'オブジェクトはいくつかの便利なメソッドを持つ単なる辞書です。 – Blender
私はあなたが指摘しているものの下でexaclyです[あなたが探している答え](http://stackoverflow.com/a/2227210/1132524)と思います。コメントを読み、[GIL](http://wiki.python.org/moin/GlobalInterpreterLock)が何であるかを確認してください。 –
あなたがリンクしている同じ質問は、変更可能な型はスレッドセーフではないことを示しています:http://stackoverflow.com/a/2227220/104847競合状態がないようにロック機構を実装する必要があります。 – Ale