Это стало дополнением к ответу 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
(Мой источник для этого здесь.)
Я был бы готов поспорить, что ваша проблема Python . Вы не сказали, какую обработку делается на каждом файле, но при условии, что вы просто занимаетесь обработкой в памяти данных, время работы будет доминировать на старте 30 миллионов виртуальных машин Python (переводчики).
Если вы можете реструктурировать свою программу Python, чтобы взять список файлов, а не только один, вы получите огромное улучшение производительности. Затем вы можете использовать Xargs для дальнейшего повышения производительности. Например, 40 процессов, каждая обработка 1000 файлов:
find ./data -name "*.json" -print0 |
xargs -0 -L1000 -P 40 python Convert.py
Это не значит, что Python - плохой / медленный язык; Это просто не оптимизировано для времени запуска. Вы увидите это с помощью любых виртуальных машин или интерпретируемых языков. Java, например, даже хуже. Если ваша программа была написана в C, все равно будет стоить отдельного процесса операционной системы для обработки каждого файла, но это было бы намного меньше.
Оттуда вы можете скриться с -P
, чтобы увидеть, сможете выжать немного больше скорости, возможно, путем увеличения количества процессов, чтобы воспользоваться преимуществами простых процессоров, когда данные прочитаны / письменно.
Как сказано, что другие, проверьте, есть ли вы / вывод. Кроме того, страница человека Xargs предлагает использовать -N
-N
-P -P
, вы не упоминаете количество Convert.py
процессов, которые вы видите, работаете параллельно.
В качестве предложения, если вы включите, вы можете попробовать использовать блочное устройство SSD или попробуйте выполнить обработку в TMPFS (конечно, в этом случае вы должны проверить достаточно памяти, избегая свопа Из-за давления TMPFS (я думаю), а накладные расходы на копирование данных к нему в первую очередь).
Проверьте наличие /etc/debian _ версии
.
Или можно использовать lsb _ release -a
.
Именно это делает розничная торговля
. 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
.
Итак, во-первых, рассмотрим ограничения:
Каковы ограничения для каждого задания? Если это ввод-вывод, вы можете , вероятно, избавиться от нескольких заданий на ядро ЦП до тех пор, пока вы не достигнете предела ввода-вывода, но если он интенсивно использует ЦП, он будет хуже, чем бессмысленное выполнение большего количества заданий одновременно, чем ядра ЦП.
Я понимаю, что GNU Parallel даст вам лучший контроль над очередью заданий и т.д.
См. GNU parallel vs & (I mean background) vs xargs -P для более подробного объяснения того, как они отличаются друг от друга.