我有一个如下的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倍(理想情况下。)
答案 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