シングルコアバウンドジョブを複数の部分に分割し、各部分をbashで別々のタスクとして実行して並列化できる同様の状況に直面しましたが、返されたデータを単一のデータに変換するのに問題があります。小川。これまでの私の素朴なアプローチは、一時フォルダを作成し、PIDを追跡し、各スレッドにそのPIDをファイルに書き込むようにし、すべての作業が完了したら、すべてのPIDを読み取り、順番にマージすることです。 PIDがファイルとして生成されました。これらの複数入力と単一出力の状況を処理するためにbash /シェルツールを使用するより良い方法はありますか?
ベストアンサー1
これまでの私の素朴なアプローチは、一時フォルダを作成し、PIDを追跡し、各スレッドにそのPIDをファイルに書き込むようにし、すべての作業が完了したら、すべてのPIDを読み取り、順番にマージすることです。 PIDがファイルとして生成されました。
これはGNU Parallelが行うこととほぼ同じです。
parallel do_stuff ::: job1 job2 job3 ... jobn > output
いくつかの追加の利点があります。
- 一時ファイルは自動的に削除されるため、GNU Parallelを終了してもクリーンアップは必要ありません。
- 現在実行中のジョブに一時スペースを提供するだけです。完了したジョブの一時スペースは、ジョブの完了後に解放されます。
- 出力が入力と同じ順序で行われるようにするには、を使用します
--keep-order
。 - 他のジョブの1行ずつ混合出力が必要な場合を使用します
--line-buffer
。
GNU Parallelには、タスクをより小さなタスクに分割する多くの機能があります。たぶん、これらのうちの1つを使って小さな仕事を作ることができますか?