質問: 以下のサイトにあるmypool.pyを使い並列処理を実装しています。 http://d.hatena.ne.jp/halhorn/20100904/1283612722 処理内容としては、子プロセス(multiprocessing.Process)として、 tshark(wiresharkのCUI版)を起動し、 そのキャプチャ結果をmultiprocessing.Pipeで受け取るものです。 理由があり、終了待ちをしないといけないため、 multiprocessing.Process.joinで終了待ちをしています。 ところが、tsharkのキャプチャ数(データ量)が多くなると、 このjoinが終了しなくなります。(少ない場合はjoinは終了します) joinの前に行っているPipe経由のrecv関数までは正常に処理できています。 送受信バッファの問題かなと考えましたが、recv関数後にpollを呼んでも 0が返る(受信すべきデータがない)ため原因がわかりません。 抽象的な文面で分かりにくくて申し訳ありませんが、 お気づきの点があり、アドバイスを頂けると助かります。 よろしくお願いします。 以上です。
回答: 安直ですが、とりあえずほしい結果が得られていて、I/O等のリソース等も触っていないのであれば、強制的に殺してしまっても良いのではないでしょうか。 joinの引数に整数を入れると、タイムアウトさせられます。 17.2. multiprocessing — プロセスベースの並列処理 — Python 3.6.5 ドキュメント