マスター python プログラム内から、次のコードで子プログラムを生成しています。
child = subprocess.Popen(..., stdout=subprocess.PIPE, stdin=subprocess.PIPE)
FWIW、子はPythonプログラムとやり取りする必要があるPHPスクリプトです。
マスター python プログラムは、実際には他のいくつかのチャネルからの通信をリッスンする必要があります。同じコードを使用して生成された他の PHP スクリプト、または からのソケット オブジェクトですsocket.accept()
。select.select()
ソースの。
私が抱えている問題は、select.select()
Windows ではサブプロセスの stdout ファイル記述子 (これは文書化されています) で動作しないことです。
- A) PHP スクリプトをポーリングして、stdout に何かが書き込まれているかどうかを確認します。(このシステムは非常に応答性が高い必要があります。1 秒あたり少なくとも 1,000 回ポーリングする必要があります!)
- B) PHP スクリプトをマスター プロセスに接続し、stdout/stdin の代わりにソケットを介して通信します。
システムをそれほど頻繁にポーリングすることはできないため、おそらく解決策(B)を使用しますが、標準出力/標準入力がうまく機能したときにソケットに再接続するのはリソースの悲しい無駄のようです。
stdoutと を使用できる代替ソリューションはありselect.select()
ますか?