我运行一个bash脚本这样的:多线程编程与bash脚本
for i in {0..3250000..50000}
do
wget "http://xxx/select?q=*:*&row_size=50000&start=$i" -O $i.csv
done
当我发送一个请求,我不得不等待完成,并写入到文件之后,它继续每次循环。但是我想要异步执行。我的意思是它会发送一个请求并循环而不用等待响应。然而,当一个响应来到它会做适当的事情。
我该怎么做?
我运行一个bash脚本这样的:多线程编程与bash脚本
for i in {0..3250000..50000}
do
wget "http://xxx/select?q=*:*&row_size=50000&start=$i" -O $i.csv
done
当我发送一个请求,我不得不等待完成,并写入到文件之后,它继续每次循环。但是我想要异步执行。我的意思是它会发送一个请求并循环而不用等待响应。然而,当一个响应来到它会做适当的事情。
我该怎么做?
您可以使用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 {}
取代{}
与 的说法,在一个单独的参数-n 1
手wget
和-P 20
一次处理20个请求, 在平行下。
或者,您可以将&
添加到您的命令行中,以便在后台执行该操作,wait
以完成进程。
您可以通过以下方式执行它。 &
在后台执行命令。
<cmd> &
但你的循环看起来巨大,它会在后台运行。该控件将返回到脚本。所以为了避免执行问题,您应该编写一些函数来检查后台操作是否已退出。
'wget .....&'? – trojanfoe