понял это Facepalm
df.loc[a, 'PSAR'] = df.loc[a-1, 'PSAR'] + (df.loc[a-1, 'AF']*(df.loc[a-1, 'EP']-df.loc[a-1, 'PSAR']))
Должно быть df.loc[a, 'PSAR'] = df.loc[a-1, 'PSAR'] + (df.loc[a-1, 'AF']*(df.loc[a-1, 'PSAR']-df.loc[a-1, 'EP']))
последние две переменные транспонированы! какая боль ...
Теперь я могу очистить функцию и сделать ее лучше.
надеюсь, что это поможет кому-то еще сделать что-то тупое и застрять на 2 дня
Можете ли вы преобразовать свой список команд в Makefile? Если это так, вы можете просто запустить «make -j X».
Подобное удовольствие от распределенных вычислений - это Mapreduce Bash Script:
http://blog.last.fm/2009/04/06/mapreduce-bash-script
И спасибо, что указали на ppss!
You can use the xargs command, its --max-procs does what you want. For instance Charlie Martin solution becomes with xargs:
tr '\012' '\000' <mycommands.sh |xargs --null --max-procs=$X bash -c
details:
I tested it with this mycommands.sh file for instance:
date
date "+%Y-%m-%d" >"The Date".txt
wc -c <'The Date'.txt >'The Count'.txt
Хорошо, разместив здесь вопрос, я нашел следующий проект, который выглядит многообещающим: ppss .
Редактировать: Не совсем то, что я хочу, PPSS сосредоточен на обработка "всех файлов в каталоге A".
Ну, в любом случае, это довольно забавный вопрос.
Вот что я бы сделал, если предположить, конечно, bash (1) .
N = 15
trap signalHandler SIGCHLD
ждет
с. Итак, теперь, он выполняет первые N
команд, а затем ждет. Когда первый дочерний элемент завершается, ожидание возвращается, он читает другую строку, запускает новую команду и снова ждет.
Теперь это случай, когда многие задания завершаются близко друг к другу. Я подозреваю , что вы можете обойтись более простой версией:
N=15
COUNT=N
cat mycommands.sh |
while read cmd
do
eval $cmd &
if $((count-- == 0))
then
wait
fi
od
Теперь эта команда запускает первые 15 команд, а затем запускает остальные по одной, когда некоторая команда завершается.
Это особый случай, но если вы пытаетесь обработать набор файлов и создать другой набор выходных файлов, вы можете запустить #cores количество процессов и проверить, есть ли выходной файл существует до его обработки. В приведенном ниже примере каталог с файлами .m4b преобразуется в файлы .mp3:
Просто запустите эту команду столько раз, сколько у вас есть ядер:
ls * m4b | while read f; выполнить тест -f $ {f% m4b} mp3 || mencoder -of rawaudio "$ f" -oac mp3lame -ovc copy -o $ {f% m4b} mp3; готово &
GNU Parallel http://www.gnu.org/software/parallel/ - это более общий инструмент для распараллеливания, чем PPSS.
Если файл запуска содержит:
command 1 > Logs/1.log
command 2 > Logs/2.log
command 3 > Logs/3.log
, вы можете выполнить:
cat runfile | parallel -j+0
, который будет запускать одну команду для каждого ядра ЦП.
Если ваши команды так же просты, как указано выше, вам даже не нужен исполняемый файл, но вы можете:
seq 1 3 | parallel -j+0 'command {} > Logs/{}.log'
Если у вас есть больше компьютеров, доступных для обработки, вы можете посмотреть параметры --sshlogin и --trc для GNU Parallel.