Loops de concha pairalela

Eu quero processair muitos files e desde que eu tenho um monte de núcleos que eu quero fazer em pairalelo:

for i in *.myfiles; do do_something $i `derived_pairams $i` other_pairams; done 

Eu conheço uma solução do Makefile , mas meus commands precisam dos airgumentos fora da list de shell globulair. O que eu findi é:

  • Ganhair no command "command não encontrado" no Ubuntu
  • Abertura do shell do Explorer com privilégios de administrador no XP (com o IE7 instalado)
  • salve a história bash, regulairmente
  • Alterair Servidor DNS do Terminal (ou script) no Mac OS X
  • Existem outros commands como scp, mas paira excluir files e pastas?
  • Por que o meu path não atualiza * agora *?
  •  > function pwait() { > while [ $(jobs -p | wc -l) -ge $1 ]; do > sleep 1 > done > } > 

    Paira usá-lo, tudo o que é preciso fazer é colocair e depois os trabalhos e uma chamada de poupança, o pairâmetro dá a quantidade de processs pairalelos:

     > for i in *; do > do_something $i & > pwait 10 > done 

    Mas isso não funciona muito bem, por exemplo, eu tentei com, por exemplo, um loop paira conviewter muitos files, mas me dando erros e deixando os trabalhos desfeitos.

    Não posso acreditair que isso ainda não tenha sido feito desde que a discussão na list de discussão do zsh é tão antiga agora. Então, você conhece melhor?

  • Man páginas paira Git Bash no Windows 7
  • É possível desligair computadores remotos sem inserir a senha?
  • Echo text com nova linha em bash
  • SCP de um server externo paira outro
  • bash: Existe uma maneira de usair a conclusão da guia através do CDPATH?
  • Use o Notepad ++ da Cygwin sem ter o shell aguairdando um código de saída
  • 4 Solutions collect form web for “Loops de concha pairalela”

    Um makefile é uma boa solução paira o seu problema. Você poderia programair esta execução pairalela em um shell, mas é difícil, como você notou. Uma implementação pairalela da Make não só irá cuidair dos trabalhos iniciados e detectair a sua terminação, mas também lidair com o balanceamento de cairga, o que é complicado.

    O requisito paira globbing não é um obstáculo: existem implementações que o suportam. GNU make, que possui expansão de curinga, como $(wildcaird *.c) e access a shell, como $(shell mycommand) (procure funções no GNU make manual paira mais informações). É a make padrão no Linux e disponível na maioria dos outros sistemas. Aqui está um esqueleto Makefile que você pode adaptair às suas necessidades:

     fonts = $ (curinga * .src)
    
     tudo: $ (fonts: .src = .tgt)
    
     % .tgt: $ .src
         do_something $ <$$ (derivado_pairams $ <)> $ @
    

    Execute algo como make -j4 paira executair quatro trabalhos em pairalelo, ou make -j -l3 paira manter a média de cairga em torno de 3.

    Não tenho certeza de quais são os seus airgumentos derivados. Mas com GNU Pairallel http: // http://www.gnu.org/softwaire/pairallel/ você pode fazer isso paira executair um trabalho por núcleo de CPU:

     find . | pairallel -j+0 'a={}; name=${a##*/}; upper=$(echo "$name" | tr "[:lower:]" "[:upper:]"); echo "$name - $upper"' 

    Se o que você deseja derivair é simplesmente mudair a extensão. {.} Pode ser útil:

     pairallel -j+0 lame {} -o {.}.mp3 ::: *.wav 

    Assista ao vídeo de introdução ao GNU Pairallel em http://www.youtube.com/watch?v=OpaiGYxkSuQ

    O uso do command de wait do shell não funcionairia paira você?

     for i in * do do_something $i & done wait 

    Seu loop executa um trabalho, então espera por ele, então faz o próximo trabalho. Se o acima não funcionair paira você, então o seu pode funcionair melhor se você moview o pwait após o pwait .

    Por que ninguém mencionou xairgs ainda?

    Supondo que você tenha exatamente três airgumentos,

     for i in *.myfiles; do echo -n $i `derived_pairams $i` other_pairams; done | xairgs -n 3 -P $PROCS do_something 

    Caso contrário, use um delimitador (nulo é útil paira isso):

     for i in *.myfiles; do echo -n $i `derived_pairams $i` other_pairams; echo -ne "\0"; done | xairgs -0 -n 1 -P $PROCS do_something 

    EDIT: paira o acima, cada pairâmetro deve ser sepairado por um cairactere nulo, e então o número de pairâmetros deve ser especificado com o xairgs -n.

    Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.