puf (Parallel URL fetcher) しか見つかりませんでしたが、ファイルからURLを読み取ることができませんでした。
puf < urls.txt
も動作しません。
サーバーにインストールされているオペレーティング システムは Ubuntu です。
答え1
使用GNU パラレル、
$ パラレル -j${ジョブ}wget < urls.txt
またはxargs
GNU Findutils、
$ xargs -n 1 -P${ジョブ}wget < urls.txt
ここで、は同時に実行を許可する${jobs}
の最大数です(の行ごとに1 つの呼び出しを取得するには に設定します)。/がない場合、は CPU コアと同じ数のジョブを一度に実行し (ネットワーク IO によって制限されている場合は必ずしも意味がありません)、 は一度に 1 つずつ実行されます。wget
-n
1
wget
urls.txt
-j
-P
parallel
wget
xargs
parallel
優れた機能の 1 つは、xargs
同時に実行されているジョブの出力を分離しておくことですが、それを気にしない場合は、xargs
プリインストールされている可能性が高いです。
答え2
答え3
これは、Python と pycurl ライブラリを使用して実装できます。pycurl ライブラリには、複数の同時接続を可能にする独自の偶数ループを実装する「multi」インターフェイスがあります。
ただし、インターフェースは C に似ているため、他のより「Python 的な」コードと比較すると少し扱いにくいです。
私は、この上にもっと完全なブラウザのようなクライアントを構築するラッパーを書きました。これを例として使用できます。pycopia.WWW.クライアントモジュール。HTTPConnectionManager はマルチインターフェースをラップします。
答え4
GNU Parallel のマニュアル ページの一部には、並列再帰 wget の例が含まれています。
https://www.gnu.org/software/parallel/man.html#example-breadth-first-parallel-web-crawler-mirrorer
HTML は 2 回ダウンロードされます。1 回はリンクの抽出用、もう 1 回はディスクへのダウンロード用です。その他のコンテンツは 1 回だけダウンロードされます。
再帰性が必要ない場合、ephemient の答えは明白に思えます。