Webページのリストから電話番号をスクラップし、次のように地図の縮小を実装しました。
PARALLEL_OPTS="..."
SCRIPT="curl --silent --cookie '$COOKIES' {} | egrep -o '[2-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' | sort -u"
cat URLS | parallel $PARALLEL_OPTS "$SCRIPT" >> numbers
URLが同じサーバー上にあり、各呼び出しがcurl
新しい接続を使用するため、これは非効率的です。代わりに、接続(HTTP接続を維持)を再利用したいと思います。たとえば、次のようになります。
cat URLs | wget -q --input-file=- --output-document=- 2>/dev/null
parallel
パラメータを使用して複数回呼び出すのではなく、プロセスを使用してSTDINを介してタスクを渡す方法はありますか?
ベストアンサー1
最初:
PARALLEL_OPTS="..."
$ PARALLELを使用すると、GNU Parallelは自動的に選択します。
--pipe
ここではwget
一度に1000のURLを提供します。
cat URLS | parallel --pipe -n 1000 wget -q --input-file=- --output-document=- '2>/dev/null'
ただし、行数を計算せずにURLブロック(デフォルトは1MB)のみを提供する方が効率的です。
cat URLS | parallel --pipe --block 1M wget -q --input-file=- --output-document=- '2>/dev/null'
最高速度は約1GB/sです。使用するのに十分な可能性が高いですが、1秒あたり1 GB以上のURLを処理する人は誰ですか?
parallel -a URLS --pipepart --roundrobin my_command
各コアは1GB / sを提供します。バージョン20150922から利用可能です。
年に一度このチュートリアルを確認してくださいman parallel_tutorial
。あなたのコマンドラインはあなたを愛するでしょう。