【问题标题】:GNU Parallel as job queue processorGNU Parallel 作为作业队列处理器
【发布时间】:2019-03-27 11:12:32
【问题描述】:

我有一个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 

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

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

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

【问题讨论】:

  • 查看parallel --pipe 和parallel --pipe-part。另外,考虑更改worker.php 以查看和循环多个参数,以便一次调用可以处理许多参数/行 - 原因是您目前为文件的每一行都支付了启动全新 PHP 解释器的代价!如果您使worker.php 能够处理大量行,则可以使用parallel -X 并获得更好的性能。
  • 运行一个作业需要多长时间?

标签: php gnu-parallel


【解决方案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

【讨论】:

  • 超棒的,这很神奇,能否请你为新手添加一点解释,特别是 :::: 和 -u 部分?
猜你喜欢
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多