Pythonでは、twisted loopingcall、multiprocessing.Process、およびmultiprocessing.Queueを使用します。ゾンビプロセスを作成することは可能ですか?そして、もしそうなら、どのように?
1 に答える
6
ゾンビとは、完了したが、開始したプロセスによってその完了がまだ通知されていないプロセスです。子を刈り取るのはツイステッドプロセスの責任です。
でプロセスを開始するとspawnProcess
、すべてが常に期待どおりに機能するはずです。ただし、Twistedのバグ#733(長い間修正されています)で説明されているように、PythonのAPIは歴史的に相互の連携を困難にしていたため、プロセスを生成する他の関数でTwistedを使用する場合は厄介なエッジケースが多数ありますシグナルハンドラ。
これは最近のバージョンのコードですべて修正されていますが、次の条件でもこのバグが発生する可能性があると思います。
- 10.1より前のバージョンのTwistedを使用しています。
- 2.6より前のバージョンのPythonを使用しています。
- Twistedのネイティブ拡張モジュールを構築していません(インストールされたバージョンではなく、開発チェックアウトまたは解凍されたtarballから作業している場合は、でこれを修正できます
python setup.py build_ext -i
)。 popen
またはのようなモジュールを使用していますsubprocess
。
Twistedをアップグレードするか、適切なコマンドを実行することで当面の問題が解決することを願っていますが、それでもspawnProcess
、プロセス出力をreactorイベントループの通常のイベントとして扱うことができるため、の使用を検討する必要があります。
于 2011-07-05T22:08:36.493 に答える