Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash脚本中的多线程_Bash - Fatal编程技术网

Bash脚本中的多线程

Bash脚本中的多线程,bash,Bash,我从bash运行php,并在文本文件中循环尽可能多的行 这是我的密码 #!/bin/bash cat data.txt | while read line do echo 'scrape: '$line php index.php $line >> output.csv done 如何同时运行,比如说每次运行10个线程。您可以使用GNU parallel的sem轻松实现这一点: #!/bin/bash cat data.txt | while read line do

我从bash运行php,并在文本文件中循环尽可能多的行

这是我的密码

#!/bin/bash
cat data.txt | while read line
do
   echo 'scrape: '$line
   php index.php $line >> output.csv
done

如何同时运行,比如说每次运行10个线程。

您可以使用GNU parallel的
sem
轻松实现这一点:

#!/bin/bash
cat data.txt | while read line
do
   echo 'scrape: '$line
   sem -j 10 php index.php $line >> output.csv
done

但是,当并行写入同一个文件时,由您来确保输出是有意义的。您可能想写入不同的文件,然后再加入它们。

虽然另一个人的答案是正确的,
sem
相当慢(每个作业300毫秒),在这种情况下,它可以被对GNU Parallel的一次调用所取代(启动大约需要300毫秒,每个作业需要10毫秒):

对于每个作业一个文件:

parallel -j10 "(echo scrape: {}; php index.php {}) > output{#}.csv" :::: data.txt

bash并没有真正的线程,但您可以在后台运行进程,方法是将
&
放在行的末尾,或者您可以看到一个工具,就像您真正在推动bash的极限一样。对于将
output.csv
更改为
output$((i++).csv
parallel -j10 "(echo scrape: {}; php index.php {}) > output{#}.csv" :::: data.txt