Python: Cat サブプロセスの並列実行
このスクリプトは、複数の cat | を実行することを目的としています。 zgrep コマンドをリモート サーバー上で実行し、その出力を個別にキャプチャしてさらに処理します。ただし、現在の実装ではこれらのコマンドが順番に実行されるため、パフォーマンスが低下します。
この問題に対処するには、Python の並列処理の力を活用できます。コードを次のように変更すると、各コマンドの出力を個別に収集する機能を維持しながら、サブプロセス呼び出しを並行して実行できます。
<code class="python">import asyncio import sys from subprocess import Popen, PIPE, STDOUT # Run commands in parallel processes = [Popen('ssh remote_host cat files_to_process | zgrep --mmap "regex"', shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True) for _ in range(5)] # Collect outputs in parallel def get_lines(process): return process.communicate()[0].splitlines() outputs = [get_lines(process) for process in processes]</code>
この更新されたコードは、サブプロセス モジュールの Process クラスを利用して、コマンドごとにサブプロセスを作成します。次に、通信メソッドを使用して各プロセスからの出力を取得します。空の文字列を stdin パラメータへの入力として指定することで、サブプロセスに入力を送信しないように指定できます。
このスクリプトでは、リスト内包表記を使用してプロセスのリストと同時に出力するリスト。このアプローチは、マルチプロセッシングやスレッドを使用する場合と比較して、よりシンプルかつ簡潔な実装を提供します。
さらに、スクリプトは close_fds パラメーターを使用して、子プロセスのファイル記述子が使用後に確実に閉じられるようにします。これにより、サブプロセスが並行して実行される場合の潜在的なリソース リークやエラーを防ぐことができます。
以上が複数の `cat | を実行する方法zgrep` コマンドを Python と並行して実行するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。