2013-07-17 49 views
3

我运行一个bash脚本这样的:多线程编程与bash脚本

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

当我发送一个请求,我不得不等待完成,并写入到文件之后,它继续每次循环。但是我想要异步执行。我的意思是它会发送一个请求并循环而不用等待响应。然而,当一个响应来到它会做适当的事情。

我该怎么做?

+2

'wget .....&'? – trojanfoe

回答

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 {}取代{}与 的说法,在一个单独的参数-n 1wget-P 20 一次处理20个请求, 在平行下。

或者,您可以将&添加到您的命令行中,以便在后台执行该操作,wait以完成进程。

1

您可以通过以下方式执行它。 &在后台执行命令。

<cmd> & 

但你的循环看起来巨大,它会在后台运行。该控件将返回到脚本。所以为了避免执行问题,您应该编写一些函数来检查后台操作是否已退出。