Как сделать этот код короче?

Трудно определить точное влияние на конкретное приложение без экспериментов, НО общее эмпирическое правило заключается в том, что небольшое превышение количества ядер полезно (например, большинство руководств по компиляции предлагают вызывать make с числом ядер/потоков + 1 ), но его превышение на большую величину, скорее всего, непродуктивно из-за дополнительных накладных расходов. Причина этого в том, что если одна (или пара )задач находятся в спящем режиме, ожидая ввода-вывода, таймеров или чего-то еще, другие потоки все еще могут продолжать работу.

Перетасовка работы (Планирование ОС )происходит во всех современных операционных системах, и с этим нам следует работать, а не бороться с этим. Если кажется, что есть что-то несвязанное, конкурирующее, вы можете отказаться от хорошего уровня своего процесса, но на выделенном экземпляре AWS... Трудно представить, что это необходимо.

0
15.01.2020, 10:07
2 ответа

Я вижу место для улучшений.

  • первым параметром для поиска является каталог, а не путь с " *" в конце;

  • find выполняет поиск в подкаталогах -, поэтому вы хотите ограничить «поиск», чтобы не искать в подкаталогах -(найти параметр «-maxdepth 1» );

  • ограничить результаты поиска файлами, потому что если у вас есть каталог с именем "something.pdf", вам могут не понравиться результаты (найти параметр " -type f" );

  • Второй параметр cp /home/peace/Desktop/yello является именем файла результата? но что, если pdfgrep может найти «желтый» в нескольких файлах PDF, какой из них является правильным результатом? если «/home/peace/Desktop/yello» — это каталог, вы хотите добавить «/» в конце. поэтому я думаю, что это каталог, в который мы помещаем файлы результатов.

Итак, поехали:

find /home/peace/ -maxdepth 1 -type f -iname "*.pdf" -exec sh -c '
  for f do
    for i in yello green blue grey black white; do
      pdfgrep -iqe "$i" "$f" &&
        cp -f "$f" "/home/peace/Desktop/$i/"
    done
  done' sh {} + 

мы также можем добавить проверку существования каталога результатов.

0
28.01.2020, 02:56

Сzsh:

#! /bin/zsh -
cd /home/peace || exit
set -o extendedglob # for (#i)
pdf=(*.(#i)pdf(.ND)) # all pdf files case insensitive, including hidden ones
                     # in the current directory, only considering regular files.
colors=(yello green blue grey black white)

(($#pdf)) || exit 0 # exit with success if there's no pdf file (job already done)

ret=0
for color ($colors) {
  files=(${(0)"$(pdfgrep -ilZe $color -- $pdf)"}) # all files containing the color
                                                  # using NUL-delimited records
  if (($#files)) { # some files were found
    mv -i -- $files Desktop/$color/ || ret=$? # move them, record failures
    pdf=(${pdf:|files}) # remove the files from the list as we've moved them
  }
}
exit $ret

Это сводит к минимуму количество вызовов pdfgrepи число чтений каталога /home/peace.

0
28.01.2020, 02:56

Теги

Похожие вопросы