GNU Parallel作为作业队列处理器

时间:2018-10-23 09:08:53

标签: php gnu-parallel

我有一个如下的worker.php文件

<?php

$data = $argv[1];

//then some time consuming $data processing

然后我使用gnu parallel作为穷人的工作队列来运行

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

当我在4 cpu机器上时,通过4个php进程进行分叉的工作方式。

但是对我来说仍然很同步,因为读取LINE仍一次读取一行。

因为它是10GB的文件,所以我想知道是否可以通过并行方式将其拆分为n个部分(其中n =我的cpus数)来并行读取同一文件,这将使导入速度快n倍(理想情况下。)

1 个答案:

答案 0 :(得分:1)

无需开展while业务:

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

-u取消输出分组。仅在不使用输出的情况下使用此选项,因为不同作业的输出可能会混合。

::::文件输入源。等效于-a

我认为您至少将从阅读“ GNU Parallel 2018”的第2章(在15分钟内学习GNU Parallel)中受益。你可以在这里买 http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html 或通过以下网址下载:https://doi.org/10.5281/zenodo.1146014