Bash脚本中的多线程
我从bash运行php,并在文本文件中循环尽可能多的行 这是我的密码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
#!/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