我從bash運行php,並在文本文件中循環儘可能多的行。在Bash腳本中的多線程
這是我的代碼
#!/bin/bash
cat data.txt | while read line
do
echo 'scrape: '$line
php index.php $line >> output.csv
done
我怎麼能同時運行,就是每運行10線程。
我從bash運行php,並在文本文件中循環儘可能多的行。在Bash腳本中的多線程
這是我的代碼
#!/bin/bash
cat data.txt | while read line
do
echo 'scrape: '$line
php index.php $line >> output.csv
done
我怎麼能同時運行,就是每運行10線程。
您可以輕鬆地從sem
GNU平行做到這一點:
#!/bin/bash
cat data.txt | while read line
do
echo 'scrape: '$line
sem -j 10 php index.php $line >> output.csv
done
然而,這是由你來確保並行寫入同一個文件時,輸出有意義。您可能想寫入不同的文件並在之後加入。
如何寫入每個線程的不同文件? –
將'output.csv'更改爲'output $((i ++))'。csv' –
雖然那個人的回答是正確的,但sem
很慢(每個作業300毫秒),並且在這種情況下,它可以被一次調用GNU並行(在啓動時需要大約300毫秒和10毫秒每個作業):
parallel -j10 "echo scrape: {}; php index.php {}" :::: data.txt > output.csv
對於每個作業一個文件:
parallel -j10 "(echo scrape: {}; php index.php {}) > output{#}.csv" :::: data.txt
慶典並沒有真正有線程,但你可以通過把'&'在該行的結束在後臺運行進程,或者你可以看看一個工具,如[GNU parallel](https://www.gnu.org/software/parallel/) –
你真的在推動bash的極限。如果使用像python或ruby這樣的適當腳本語言,你會有更多*更容易的時間 – Alexander