Executando um script python 200.000 vezes em paralelo usando bash [duplicate]

3

Eu preciso executar meu script Python 200.000 vezes. É possível fazer a execução paralela usando o bash? Já que são 200.000 vezes eu gostaria de usar pelo menos 10 threads simultaneamente

    
por Rahul 10.10.2015 / 04:01

1 resposta

4

Digamos que this.py contenha o seguinte:

#!/usr/bin/python
from datetime import datetime
now = datetime.now()
print now

O seguinte no Bash, executaria 10 processos de this.py simultaneamente em 20.000 rodadas. A próxima rodada começa depois que os 10 processos são concluídos. Isso permitirá que você execute this.py 200.000 vezes, enquanto usa apenas 10 segmentos de cada vez.

#!/bin/bash
for i in {1..20000}; do
  echo -e "\nROUND $i\n"
  for j in {1..10}; do
    /path/to/this.py &
  done
  wait
done 2>/dev/null

... ou use o one-liner:

for i in {1..20000}; do echo -e "\nROUND $i\n"; for j in {1..10}; do /path/to/this.py & done; wait; done 2>/dev/null

Você pode obviamente excluir a linha echo . Eu só fiz isso para fins de teste e para mostrar a saída bonita quando STDERR é redirecionado para /dev/null . Minha saída ficaria assim:

ROUND 1

2015-10-09 23:20:12.432295
2015-10-09 23:20:12.444988'
2015-10-09 23:20:12.471788
2015-10-09 23:20:12.482884
2015-10-09 23:20:12.519446
2015-10-09 23:20:12.558949
2015-10-09 23:20:12.560826
2015-10-09 23:20:12.582571
2015-10-09 23:20:12.600680
2015-10-09 23:20:12.625727

ROUND 2

2015-10-09 23:20:12.761279
2015-10-09 23:20:12.764459
2015-10-09 23:20:12.801361
2015-10-09 23:20:12.831900
2015-10-09 23:20:12.853339
2015-10-09 23:20:12.877965
2015-10-09 23:20:12.921946
2015-10-09 23:20:12.950549
2015-10-09 23:20:12.973625
2015-10-09 23:20:12.986714

ROUND 3

2015-10-09 23:20:13.128276
2015-10-09 23:20:13.169144
2015-10-09 23:20:13.222183
2015-10-09 23:20:13.234889
2015-10-09 23:20:13.242653
2015-10-09 23:20:13.246504
2015-10-09 23:20:13.305419
2015-10-09 23:20:13.306198
2015-10-09 23:20:13.317769
2015-10-09 23:20:13.328895

... etc.

Também procure em GNU Parallel , embora eu ache que possa estar limitado a rodar tantos trabalhos simultâneos quanto o número de núcleos que você tem. Você pode evitar essa limitação executando vários processos parallel . É um substituto incrível para loops e tal.

    
por 10.10.2015 / 06:41