長期実行フィルタの場合、並列

長期実行フィルタの場合、並列

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。あなたのコマンドラインはあなたを愛するでしょう。

おすすめ記事