再帰bash関数を並列化する方法は?

再帰bash関数を並列化する方法は?

curlデフォルトでは、リンクセットのエンドポイントを取得し、各リンクを再帰的に(他のリンクセットに対して)再帰的にカールするbash関数があります。

task() {
  link="$1"
  response=$(curl "$link")
  
  # save response data to file...

  # process response to find another set of links and save to variable x...
  if condition
      echo "$x" | while read -r link
        task "$link"
}

上記のコードは約100のカール操作を生成するのに時間がかかります。ボトルネックを引き起こすのは、主にエンドポイントの応答時間(処理時間ではありません)です。

状況

  1. リンク数に関する情報はありません。親リンクを最初に使用しないと、curl子リンクを持つことはできません。
  2. 各応答はcurl link自動的にファイルに保存する必要があります。

このプロセスを並列化することは可能ですか?ソリューションに必要な(またはよりエレガントな)GNU parallel他の外部ツールがあれば大丈夫です。

ベストアンサー1

幅優先スパイダーをテンプレートとして使用できますか?https://www.gnu.org/software/parallel/man.html#example-breadth-first-parallel-web-crawler-mirrorer

おすすめ記事