3

次のようにbashスクリプトを実行しています:

for i in {0..3250000..50000}
  do
    wget "http://xxx/select?q=*:*&row_size=50000&start=$i" -O $i.csv
  done

リクエストを送信するたびに、リクエストが完了するのを待ってファイルに書き込む必要があり、その後はループし続けます。ただし、非同期で実行したい。つまり、リクエストを送信し、レスポンスを待たずにループします。ただし、応答が来ると、適切なことが行われます。

どうやってやるの?

4

2 に答える 2

3

使用できますxargs

printf '%s\0' {0..50000..3250000} |
    xargs -0 -I {} -n 1 -P 20 \
    wget 'http://xxx/select?q=*:*&row_size=50000&start={}' -O {}.csv

-0区切り文字として NULL 文字を選択し、引数に-I {}置き換え、1 つの引数を に渡し、一度 に 20 の要求を並行して処理します。{}-n 1wget-P 20

&または、コマンド ラインにa を追加して、バックグラウンドで実行waitし、プロセスを終了させることもできます。

于 2013-07-17T11:01:51.013 に答える
1

以下で実行できます。&コマンドをバックグラウンドで実行します。

<cmd> &

しかし、あなたのループは巨大に見え、バックグラウンドで実行されます。コントロールはスクリプトに戻されます。したがって、実行の問題を回避するには、バックグラウンド操作が終了したかどうかを確認する関数を作成する必要があります。

于 2013-07-17T10:45:53.973 に答える