親プロセスの終了時に終了しない Python 2.7 マルチプロセッシング プロセスがあります。親が死亡したときに強制的に終了させるデーモンフラグを設定しました。ドキュメントには次のように記載されています。
「プロセスが終了すると、すべてのデーモンの子プロセスを終了しようとします。」
p = Process(target=_serverLaunchHelper, args=args)
p.daemon = True
print p.daemon # prints True
p.start()
kill コマンドを使用して親プロセスを終了すると、デーモンは実行されたままになります (次の実行時にポートがブロックされます)。子プロセスは SimpleHttpServer を開始し、serve_forever
他に何もせずに呼び出しています。私の推測では、ドキュメントの「試行」の部分は、ブロックしているサーバー プロセスがプロセスの停止を停止しており、結果としてプロセスを孤立させていることを意味していると思います。子にサービングを別のスレッドにプッシュさせ、メイン スレッドに親プロセス ID の変更をチェックさせることもできますが、これはデーモン機能を複製するだけの多くのコードのように思えます。
デーモンフラグが説明どおりに機能しない理由について誰かが洞察を持っていますか? これは、windows8 64 ビットおよび ubuntu12 32 ビット vm で再現可能です。
プロセス関数の煮詰めたバージョンは次のとおりです。
def _serverLaunchHelper(port)
httpd = SocketServer.TCPServer(("", port), Handler)
httpd.serve_forever()