I am running a bash script as like that:
for i in {0..3250000..50000}
do
wget "http://xxx/select?q=*:*&row_size=50000&start=$i" -O $i.csv
done
Every time when I send a request I have to wait to finish it and write to a file and after that it continues to looping. However I want to do it asynchronously. I mean that it will send a request and loop without waiting response. However when a response comes it will do the proper thing.
How can I do that?
Advertisement
Answer
You can use xargs:
printf '%s' {0..50000..3250000} |
xargs -0 -I {} -n 1 -P 20
wget 'http://xxx/select?q=*:*&row_size=50000&start={}' -O {}.csv
The -0 selects the NULL character as delimiter, -I {} replaces {} with
the argument, -n 1 hands over a single argument to wget and -P 20
processes 20 requests at a time, in parallel.
Alternatively you can append a & to your command line to execute it in background and wait for the processes to finish.