【问题标题】:Parallelize processes on Ubuntu在 Ubuntu 上并行化进程
【发布时间】:2016-07-18 10:47:50
【问题描述】:

我想并行运行一些进程,例如:

php scan.php 1.pdf > 1.txt & php scan.php 2.pdf > 2.txt & php scan.php 3.pdf > 3.txt

但问题是在目录中列出文件(如 1.pdf、2.pdf...)时自动调用它。

如果我使用

find inprogress-gp/ -type f -name '*.pdf' -exec basename {} \; | xargs -n1 php scan.php

那我可以打电话了

php scan.php 1.pdf
php scan.php 2.pdf
php scan.php 3.pdf
....

任何线索如何解决这个任务?

【问题讨论】:

    标签: linux ubuntu parallel-processing xargs


    【解决方案1】:

    如果您愿意接受 GNU Parallel 答案:

    parallel 'php scan.php {} > {.}.txt' ::: *.pdf
    

    或者,如果您的 PDF 文件位于子目录中:

    find . -name \*.pdf | parallel 'php {} > {.}.txt'
    

    以下演示在有可用作业槽的情况下立即启动作业,因此,仅使用 2 个内核,它会在 10 秒内完成 10 秒的睡眠和 5 次每次 2 秒的睡眠:

    parallel --line-buffer -j 2 'echo Job {#} starting; sleep {}; echo Job {#} done' ::: 10 2 2 2 2 2
    Job 1 starting
    Job 2 starting
    Job 2 done
    Job 3 starting
    Job 3 done
    Job 4 starting
    Job 4 done
    Job 5 starting
    Job 5 done
    Job 6 starting
    Job 1 done
    Job 6 done
    

    【讨论】:

    • 嗯,看起来很有希望,但如果我的文件夹中有 1000+ pdf-s,如何设置最大并行进程?
    • 如果你有 8 个 CPU 核心,它将一次运行 8 个。如果你想要更多,比如 32,只需使用 parallel -j 32,或者如果你想要 2,使用 parallel -j 2
    • 它实际上比最大值更好,它实际上是它在任何时候保持运行的数字,所以如果一个作业需要几个小时,它将保持其他 7 个较小的作业运行一直都是。
    • 它有效,谢谢! :) 如果下一个进程可以在前一个进程之后立即开始,而不等待所有并行任务执行会更好。但这无论如何都更好。 :)
    • 它确实是这样工作的——我添加了一个例子来澄清。很高兴它对你很有效 - 祝你的项目好运!
    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 2021-04-06
    • 2020-03-29
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 2021-04-12
    相关资源
    最近更新 更多