web-dev-qa-db-ja.com

パラレルwgetはありますか? fpingのようなものですが、ダウンロードのみですか?

私はpuf(Parallel URL fetcher)しか見つかりませんでしたが、ファイルからURLを読み取ることができませんでした。何かのようなもの

 puf < urls.txt

どちらも機能しません。

サーバーにインストールされているオペレーティングシステムはUbuntuです。

15
Moonwalker

GNU Parallel を使用して、

 $並列-j $ {jobs} wget <urls.txt 

またはxargs from GNU Findutils

 $ xargs -n 1 -P $ {jobs} wget <urls.txt 

ここで、${jobs}は、同時に実行できるwgetの最大数です(-n1に設定して、1行あたり1つのwget呼び出しを取得しますurls.txt)。 -j/-Pがない場合、parallelはCPUコアと同じ数のジョブを同時に実行します(ネットワークIOによってバインドされたwgetには必ずしも意味がありません)。 、およびxargsは一度に1つずつ実行されます。

parallelxargsを超える優れた機能の1つは、同時に実行されているジョブの出力を分離することですが、それを気にしない場合は、xargsが可能性が高くなりますプリインストールされている。

25
ephemient
6
user17591

Pythonとpycurlライブラリを使用して実装できます。pycurlライブラリには、複数の同時接続を可能にする独自の偶数ループを実装する「マルチ」インターフェイスがあります。

ただし、インターフェイスはかなりCに似ているため、他のより「Python的」なコードと比較すると少し面倒です。

その上に、より完全なブラウザのようなクライアントを構築するためのラッパーを作成しました。これを例として使用できます。 pycopia.WWW.client モジュールを参照してください。 HTTPConnectionManagerはマルチインターフェイスをラップします。

2
Keith

これは機能し、ローカルまたはリモートのDoSではなく、適切に調整されます。

(bandwidth=5000 jobs=8; \
 parallel      \
   --round     \
   -P $jobs    \
   --Nice +5   \
   --delay 2   \
   --pipepart  \
   --cat       \
   -a urls.txt \
     wget                                \
       --limit-rate=$((bandwidth/jobs))k \
       -w 1                              \
       -nv                               \
       -i {}                             \
)
2
dhchdhd

GNU Parallelのmanページの一部には、並列再帰wgetの例が含まれています。

https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Breadth-first-parallel-web-crawler-mirrorer

HTMLは2回ダウンロードされます。1回はリンクの抽出用、もう1回はディスクへのダウンロード用です。他のコンテンツは一度だけダウンロードされます。

あなたが再帰性を必要としない場合、エフェミエントの答えは明白です。

1
Ole Tange

並列ダウンロードの犠牲者は面倒ではありません。1つの接続が各クライアントにサービスを提供することを期待しています。複数の接続を設定すると、クライアント全体が少なくなります。 (つまり、これは失礼な行動と見なされます)。

0
vonbrand