GNU Parallel как процессор очереди заданий - PullRequest
0 голосов
/ 23 октября 2018

У меня есть файл 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 

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

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

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

1 Ответ

0 голосов
/ 23 октября 2018

Нет необходимости заниматься 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

...