我有一个工人.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 CPU 机器上时,通过分叉 4 个 PHP 进程来工作。
但对我来说仍然感觉很同步,因为阅读 LINE 仍然一次读取一行。
由于它是 10GB 文件,我想知道我是否可以以某种方式使用并行通过将它分成 n 个部分来并行读取同一个文件(其中 n = 我的 cpu 数量(,这将使我的导入速度快 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