GNU Parallel как процессор очереди заданий

У меня есть файл worker.php, как показано ниже

<?php

$data = $argv[1];

//then some time consuming $data processing

и я запускаю это как очередь на работу бедного человека, используя GNU параллельно

while read LINE; do echo $LINE; done < very_big_file_10GB.txt  | parallel -u php worker.php

какой тип работает, развивая 4 процесса PHP, когда я нахожусь на машине с 4 процессорами.

Но это все еще кажется мне довольно синхронным, потому что read LINE по-прежнему читает по одной строке за раз.

Поскольку размер файла составляет 10 ГБ, мне интересно, можно ли каким-то образом использовать параллельное чтение одного и того же файла параллельно, разделив его на n частей (где n = число моих процессоров), что ускорит мой импорт в n раз (в идеале).

1

Решение

Не нужно делать while бизнес:

parallel -u php worker.php :::: very_big_file_10GB.txt

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

:::: Источник ввода файла. Эквивалентно -a,

Я думаю, что вам будет полезно прочитать по крайней мере главу 2 (Изучите GNU Parallel за 15 минут) из «GNU Parallel 2018». Вы можете купить его на
http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html
или загрузите его по адресу: https://doi.org/10.5281/zenodo.1146014

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]