исправьте использование параллели xargs

Это стало дополнением к ответу Vítor Souza.

В Xfce Quantal (Xubuntu 12.10, Монетный двор 14 Xfce) не мог решить это методами, уже упомянутыми (см. ниже). То, что работало, устанавливало ibus пакет и его зависимости.

(Источник - более точно здесь.)


Более старое решение не сделало работавший для меня: в Ubuntu 12.10, файле gtk.immodules имеет другое расположение:

/usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/gtk.immodules

или

/usr/lib/i386-linux-gnu/gtk-2.0/2.10.0/gtk.immodules

(Мой источник для этого здесь.)

9
19.04.2015, 14:38
3 ответа

Я был бы готов поспорить, что ваша проблема Python . Вы не сказали, какую обработку делается на каждом файле, но при условии, что вы просто занимаетесь обработкой в ​​памяти данных, время работы будет доминировать на старте 30 миллионов виртуальных машин Python (переводчики).

Если вы можете реструктурировать свою программу Python, чтобы взять список файлов, а не только один, вы получите огромное улучшение производительности. Затем вы можете использовать Xargs для дальнейшего повышения производительности. Например, 40 процессов, каждая обработка 1000 файлов:

find ./data -name "*.json" -print0 |
  xargs -0 -L1000 -P 40 python Convert.py

Это не значит, что Python - плохой / медленный язык; Это просто не оптимизировано для времени запуска. Вы увидите это с помощью любых виртуальных машин или интерпретируемых языков. Java, например, даже хуже. Если ваша программа была написана в C, все равно будет стоить отдельного процесса операционной системы для обработки каждого файла, но это было бы намного меньше.

Оттуда вы можете скриться с -P , чтобы увидеть, сможете выжать немного больше скорости, возможно, путем увеличения количества процессов, чтобы воспользоваться преимуществами простых процессоров, когда данные прочитаны / письменно.

4
27.01.2020, 20:07

Как сказано, что другие, проверьте, есть ли вы / вывод. Кроме того, страница человека Xargs предлагает использовать -N -N -P -P , вы не упоминаете количество Convert.py процессов, которые вы видите, работаете параллельно.

В качестве предложения, если вы включите, вы можете попробовать использовать блочное устройство SSD или попробуйте выполнить обработку в TMPFS (конечно, в этом случае вы должны проверить достаточно памяти, избегая свопа Из-за давления TMPFS (я думаю), а накладные расходы на копирование данных к нему в первую очередь).

0
27.01.2020, 20:07

Проверьте наличие /etc/debian _ версии .

Или можно использовать lsb _ release -a .

-121--82137-

Именно это делает розничная торговля . retail - это хвост с регулярными выражениями, инструмент, который я написал именно для того случая использования, который у вас есть. В вашем случае вы бы использовали:

retail -f -r ddddddddddddddd -u hhhhhhhhhhhhhhh logfile > log.tmp

-f является стандартной опцией tail -f . -r использует регулярное выражение для запуска диапазона включаемых строк, а -u - регулярное выражение для продолжения до. Он начинается с последнего вхождения шаблона -r и выходит после печати первого вхождения шаблона -u после этого.

Если требуется начать с первого экземпляра образца, можно использовать -b в сочетании с -r . Оба регулярных выражения являются ER , без неявной привязки, но для привязки соответствия можно использовать ^ и $ .


Вы можете получить и построить retail с помощью:

git clone https://github.com/mwh/retail.git
cd retail
./configure
make
make install

Он устанавливается в ~/.local/bin по умолчанию, но вы можете изменить это или просто скопировать исполняемый файл в нужное место.


retail полностью POSIX-совместим с , хотя я не рекомендую использовать его в вашей системе tail .

-121--87696-

Итак, во-первых, рассмотрим ограничения:

Каковы ограничения для каждого задания? Если это ввод-вывод, вы можете , вероятно, избавиться от нескольких заданий на ядро ЦП до тех пор, пока вы не достигнете предела ввода-вывода, но если он интенсивно использует ЦП, он будет хуже, чем бессмысленное выполнение большего количества заданий одновременно, чем ядра ЦП.

Я понимаю, что GNU Parallel даст вам лучший контроль над очередью заданий и т.д.

См. GNU parallel vs & (I mean background) vs xargs -P для более подробного объяснения того, как они отличаются друг от друга.

1
27.01.2020, 20:07

Теги

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