Bir sistemde kayıtlı dosyaları paralel olarak aramak için GNU Parallel kullanılıp kullanılamayacağını değerlendiriyorum. Sistemin her bir günü için sadece bir dosya (doyurma) olabilir (böylece yılda en fazla 366 dosya). Diyelim ki sistemde 3660 dosya var (yaklaşık 10 yıllık veri). Sistem çok CPU çok çekirdekli Linux veya çok CPU Solaris olabilir. Aramayı depolamak ediyorumGNU Paraleline geniş bir komut dizisi nasıl beslenir?
bir diziye (dosya başına bir komutu) dosyalar üzerinde çalışmasına emreder. Ve bu (bash kullanarak) şu anda yapıyorum ama sonra (kesinlikle bir defada tüm 3660 aramalar başlamak istemiyorum) paralel olarak başlatmak için kaç arama üzerinde hiçbir kontrole sahip budur:
#!/usr/bin/env bash
declare -a cmds
declare -i cmd_ctr=0
while [[ <condition> ]]; do
if [[ -s $cur_archive_path/log.${doy_ctr} ]]; then
cmds[$cmd_ctr]="<cmd_to_run>"
let cmd_ctr++
fi
done
declare -i arr_len=${#cmds[@]}
for ((i=0; i<${arr_len}; i++));
do
# Get the command and run it in background
eval ${cmds[$i]} &
done
wait
Ben (otomatik max. CPU'lar/çekirdeklerini anlamaya ve paralel sadece o kadar fazla arama başlayacak olan) parallel
kullanacak olursak, nasıl paralel olan dizi cmds
yeniden ve yukarıdaki kodu yeniden yazabilirsiniz? diğer alternatif bir dosyaya tüm komutları yazıp cat cmd_file | parallel
3660 dosya verim olamaz benim evren 10 yıl içinde, bilgiçlik taslayan olmak. Ama sen "hakkında" yazdığınıza göre, bunu bildiğimi ve benimkine paralel bir evrenden bakmadığımı sanıyorum (ki bu beni biraz üzüyor) ;-) –
@Adrian Haklısınız; Sıfır yıllık hesaplamak için 'about' ekledim :) –