6

Python doc を見ているとmultiprocessing.terminate()、次のことがわかりました。

Terminate() 関連付けられたプロセスがパイプまたはキューを使用しているときにこのメソッドを使用すると、パイプまたはキューが破損しやすくなり、他のプロセスで使用できなくなる可能性があります。同様に、プロセスがロックやセマフォなどを取得している場合、そのプロセスを終了すると、他のプロセスがデッドロックする可能性があります。

基本的に、キューやパイプなどを使用しているプロセスを終了すると、構造が破損するリスクがあります。

これについていくつか質問がありますが、

  1. 破損が発生した場合、PIPE、キューなどからデータを取得しようとする別のプロセスはどうなりますか?
  2. プロセスが破損しているかどうかを確認するにはどうすればよいですか?
  3. 別のプロセスが終了したことがわかっている場合、デッドロックを何らかの方法で解決できますか?

常にterminateを使用しないようにする必要があることは理解していますが、これは、これ以外に何もできない状況のためのものです

4

2 に答える 2

3

渡すデータのブロックにチェックサムを追加し、それらをチェックして、データの破損が発生していないことを確認できます。これは、データ破損のリスクがあるデータ通信で一般的な手法です。これについてはhashlibを調べて、md5やcrc32チェックサムなどを使用できます。

于 2012-11-14T10:29:02.503 に答える
1

さて、それは最善の解決策ではありませんでしたが、最初に可能な限り例外を処理しました。破損のリスクを冒したくなかったので、破損が発生する可能性があるインスタンスでアプリケーションを再起動して、問題の可能性を減らしました。

あなたの提案をありがとう@MarwanAlsabbagh。

于 2012-12-19T11:11:02.067 に答える