【问题标题】:Single thread 'gnu parallel'单线程 'gnu 并行'
【发布时间】:2015-04-09 01:15:53
【问题描述】:

这听起来可能矛盾,但有没有办法以简单的“串行”方式并行运行,甚至不加载线程池?我将并行用作 xargs 的更安全、更强大/功能更强大的替代方案。

我面临的问题是,在已经并行的一段代码中,我想顺序处理一堆 args(这些工作实际上是微不足道的,而我的 CPU 是已经运行 100%)。

我知道“-P 1”选项,但即使那样,并行似乎也会创建一个作业池(或其他东西),这实际上有相当多的开销。示例:

monarch:~/tests$ time ls -1 | xargs -n 1 -d $'\n' -I{} echo {} > /dev/null

real    0m1.084s
user    0m0.073s
sys     0m1.053s
monarch:~/tests$ time ls -1 | parallel -P1 'echo {} > /dev/null'

real    0m4.903s
user    0m2.235s
sys     0m3.046s

如您所见,并行在此处几乎占 400% 的开销。这个例子当然是微不足道的,但我的实际用例实际上并不比这复杂多少,而且我确实利用了并行的字符串替换功能。

有什么更好的方法来做我想做的事吗?我想避免 for-loop/xargs,因为我必须重写那些字符串替换......

(我在 bash 中使用并行,值得)

【问题讨论】:

  • 也许有人可以帮助您使用更简单的串行运行工具实现所需的“字符串替换功能”。您可以使用您寻求的字符串替换功能更新您的问题...
  • 这听起来像是一个 XY 问题。你想达到什么目的?对于并行性,我会想“为什么不使用支持并行的脚本”——比如 perl。
  • 很抱歉最后一条评论,发货不完整。我目前的任务可能是 XY,但我真的很想知道使用并行替代 xargs 的最佳方法。

标签: bash xargs gnu-parallel


【解决方案1】:

如果 GNU Parallel 占用 100% 的内核,请查看:http://www.gnu.org/software/parallel/man.html#EXAMPLE:-Speeding-up-fast-jobs

如果您不关心输出,--ungroup 也会使其更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 2015-05-07
    • 2012-08-31
    • 2018-06-09
    • 2019-09-23
    相关资源
    最近更新 更多