Apa cara terbaik untuk mengeksekusi 5 curlpermintaan paralleldari skrip bash? Saya tidak bisa menjalankannya secara serial karena alasan kinerja.
Apa cara terbaik untuk mengeksekusi 5 curlpermintaan paralleldari skrip bash? Saya tidak bisa menjalankannya secara serial karena alasan kinerja.
Jawaban:
Gunakan '&' setelah perintah untuk melatarbelakangi suatu proses, dan 'tunggu' untuk menunggu sampai selesai. Gunakan '()' di sekitar perintah jika Anda perlu membuat sub-shell.
#!/bin/bash
curl -s -o foo http://example.com/file1 && echo "done1" &
curl -s -o bar http://example.com/file2 && echo "done2" &
curl -s -o baz http://example.com/file3 && echo "done3" &
wait
xargs memiliki parameter "-P" untuk menjalankan proses secara paralel. Sebagai contoh:
wget -nv http://en.wikipedia.org/wiki/Linux -O- | egrep -o "http://[^[:space:]]*.jpg" | xargs -P 10 -r -n 1 wget -nv
Referensi: http://www.commandlinefu.com/commands/view/3269/parallel-file-downloading-with-wget
Saya menggunakan paralel gnu untuk tugas-tugas seperti ini.
curldengan gnu parallel?
Berikut ini curlcontoh dengan xargs:
$ cat URLS.txt | xargs -P 10 -n 1 curl
Contoh di atas harus curlmasing-masing URL secara paralel, 10 sekaligus. Apakah -n 1ada sehingga xargshanya menggunakan 1 baris dariURLS.txt file per curleksekusi.
Apa yang dilakukan masing-masing parameter xargs:
$ man xargs
-P maxprocs
Parallel mode: run at most maxprocs invocations of utility at once.
-n number
Set the maximum number of arguments taken from standard input for
each invocation of utility. An invocation of utility will use less
than number standard input arguments if the number of bytes
accumulated (see the -s option) exceeds the specified size or there
are fewer than number arguments remaining for the last invocation of
utility. The current default value for number is 5000.