Я використовую xargs
для виклику сценарію python для обробки близько 30 мільйонів невеликих файлів. Я сподіваюся використовувати xargs
для паралелізації процесу. Я використовую команду:
find ./data -name "*.json" -print0 |
xargs -0 -I{} -P 40 python Convert.py {} > log.txt
В основному, Convert.py
буде читати у невеликому файлі json (4kb), виконати деяку обробку та записати в інший 4kb файл. Я працюю на сервері з 40 ядрами процесора. І жоден інший інтенсивний процесорний процес не працює на цьому сервері.
Відслідковуючи htop (btw, чи є якийсь хороший спосіб контролювати продуктивність процесора?), Я вважаю, що -P 40
це не так швидко, як очікувалося. Іноді всі ядра замерзнуть і зменшаться майже до нуля протягом 3-4 секунд, тоді відновиться до 60-70%. Потім я намагаюся зменшити кількість паралельних процесів до -P 20-30
, але це все ще не дуже швидко. Ідеальна поведінка повинна бути лінійним прискоренням. Будь-які пропозиції щодо паралельного використання xargs?
xargs -P
і >
відкривається для перегонових умов через напівлінійну проблему gnu.org/software/parallel/… Використання GNU Parallel замість цього не матиме такої проблеми.