os.mkfifo() コマンドで名前付きパイプを作成しました。この名前付きパイプにアクセスする 2 つの異なる Python プロセスがあり、プロセス A が読み取り、プロセス B が書き込みを行っています。プロセス A は、select 関数を使用して、FIFO/パイプに使用可能なデータがあるかどうかを判断します。プロセス B は各書き込み呼び出しの後にフラッシュするという事実にもかかわらず、プロセス A の選択関数は常に戻るとは限りません (新しいデータがないかのようにブロックし続けます)。この問題を詳しく調べた後、最終的にプロセス B をプログラムして、実際の呼び出しの前後に 5KB のガベージ書き込みを追加しました。同様に、プロセス A はそれらの 5KB を無視するようにプログラムされています。これですべてが正常に機能し、選択は常に適切に返されます。私は、プロセス B が強制終了された場合にプロセス A の選択が返されることに気づいて、このハックっぽい解決策にたどり着きました (書き込みとフラッシュの後、読み取りパイプでスリープします)。名前付きパイプの Python でのフラッシュに問題はありますか?
4170 次
3 に答える
1
どの API を使用していますか? os.read()
何もバッファリングしos.write()
ません。
于 2010-02-04T15:08:02.330 に答える
1
Python の内部バッファリングが問題を引き起こしているかどうかを確認するには、スクリプトを実行するときに「python」ではなく「python -u」を実行します。これにより、python が強制的に「非バッファ モード」になり、すべての出力が即座に出力されます。
于 2010-03-24T15:10:45.890 に答える
0
フラッシュ操作は名前付きパイプには関係ありません。名前付きパイプのデータは厳密にメモリに保持され、読み取られるか FIFO が閉じられるまで解放されません。
于 2010-01-26T01:00:50.050 に答える