Issue 6721に関して、Linuxの同じPythonアプリケーションでマルチスレッドとユーザースレッドの両方を使用するためのベストプラクティスまたは回避策はありますか?python標準ライブラリのロックはforkでサニタイズする必要がありますか?Pythonでのマルチプロセッシングとスレッド化の状況
なぜ私は両方が必要ですか?子プロセスを使用して計算量を増やすと、キューを返すには大きすぎるデータ構造の結果が生成され、すぐにディスクに格納する必要があります。これらの子プロセスのそれぞれを独立したスレッドで監視することは効率的であるように見えました。その結果、スレッドは大規模な(例えば複数の)GBデータを読み込むIOを処理して、他の子プロセスの結果との組み合わせ。 子プロセスが断続的にハングアップすることがありました。他の人がここでの問題を文書化しています
https://twiki.cern.ch/twiki/bin/view/Main/PythonLoggingThreadingMultiprocessingIntermixedStudy
この明らかに未解決のpythonの問題を指している:Pythonの標準ライブラリのロック、フォークの上に消毒する必要があります。私はこれを追跡していた難易度でアラーム発生http://bugs.python.org/issue6721
は、私は答えた:むしろ役に立たない「ように注意してください」に提案し、上記へのリンクを
Are there any reasons not to mix Multiprocessing and Threading module in Python
を。
しかし、長い議論では、問題6721は、同じアプリケーションでマルチプロセッシング(またはos.fork)とユーザースレッドの両方を使用することが「バグ」であることを示唆しています。私の問題を限定的に理解した上で、同じアプリケーションでマルチプロセッシングとスレッディングの両方を使用するための回避策や戦略については、ディスカッションであまりにも多くの意見の相違があります。私の即時の問題はロギングを無効にすることで解決されましたが、私は親プロセスと子プロセスの両方で少数の他の(明示的な)ロックを作成し、さらに断続的なデッドロックが発生する可能性があると思います。
Python(2.7,3.2,3.3)アプリケーションでスレッディングとマルチプロセッシングを使用しているときにロックやロギングモジュールを使用しているときにデッドロックを回避するための推奨事項はありますか?
興味深いのは、 'multiprocessing'モジュールが既に(ロックタイプを含む)いくつかのフォークを意識したタイプを作成するために内部' treading'モジュールを使用することです。 'util.py'を参照してください。これらの型は 'manager.py'の' BaseProxy'クラスで使われます。 –