Как распараллелить для циклов, используя многопоточность в Python - PullRequest
0 голосов
/ 04 декабря 2011

Я не знаком с питоном. Я хочу распараллелить внешний цикл for для следующего псевдокода:

for(i=1 to N){  // N and n will be taken as input for the shell script. 
   min=some garbage value
   for(j=1 to n){
       val= './a.out' // call the executable a.out and take the output in val
       if(val<min)    // a.out is a random number generator script
           min=val; 
   }
   arr[k++]=min;
}
// Then I want to calculate the sum of the elements of the array 'arr'.

Я попытался использовать сценарий оболочки следующим образом. Но N может быть очень большим. Итак, мне нужно использовать многопоточность для распараллеливания внешнего цикла for.

#!/bin/bash
# set min to some garbage value

N=$1
n=$2
for (( i=1; i<=$N; i++ )); do
   min=100000000
   for (( j=1; j<=$n; j++ )); do
       val=$(/path/to/a.out)
       val2=`echo $val | bc`    // is this the correct syntax?
       if (( $val2 < $min )); then
           min=$val2; 
       fi   
   done
   arr=("${arr[@]}" "$min")
done

# Then I want to calculate the sum of the elements of the array 'arr'.
sum=0
for (( l=0; l<${#arr[@]}; l++ )); do
  sum=$( expr $sum + ${arr[$l]} )
done

echo "Sum of \$arr = ${sum}"

1 Ответ

0 голосов
/ 17 сентября 2015

Я отвечаю на вопрос для дальнейшего использования, хотя я разделяю опасения, высказанные другими авторами относительно того, является ли распараллеливание правильным путем для этого конкретного примера.

Распараллелить простой цикл for сконечно, вы можете использовать модуль потоков .Кроме того, joblib предоставляет поверх них более простой синтаксис (будьте осторожны, чтобы переключить его на потоковый бэкэнд).

Отказ от ответственности: я являюсь первоначальным автором joblib.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...