最近、os.fork()を実行して 2 つのプロセスに分割するスクリプトを作成する必要がありました。子プロセスはサーバー プロセスになり、os.pipe()で作成されたパイプを使用して親プロセスにデータを返します。通常どおり、子が'r'
パイプの端を閉じ、親がパイプの端を閉じます。'w'
pipe() からの戻り値をos.fdopenでファイル オブジェクトに変換します。
私が抱えている問題は次のとおりです。プロセスが正常に分岐し、子がサーバーになります。'w'
すべてがうまく機能し、子供はパイプの開いた端にデータを忠実に書き込みます。残念ながら、パイプの親エンドは 2 つの奇妙なことを行います: A) パイプのエンドでの操作を
ブロックします。次に、パイプの端が完全に閉じ
られていない限り、パイプに置かれたデータを読み取ることができません。read()
'r'
'w'
私はすぐにバッファリングが問題であると考え、pipe.flush()呼び出しを追加しましたが、これらは役に立ちませんでした。
書き込み終了が完全に閉じられるまでデータが表示されない理由を誰かが明らかにすることはできますか? read()
そして、呼び出しをブロックしないようにする戦略はありますか?
これは、パイプを分岐または使用した初めての Python プログラムなので、単純な間違いを犯した場合はご容赦ください。