GNU Parallel 作为作业队列处理器

GNU Parallel as job queue processor

我有一个 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 个进程可以实现哪种工作方式。

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

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

不需要做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