在 Ubuntu 上并行处理进程
Parallelize processes on Ubuntu
我想运行一些并行的进程,我想做一个例子:
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
....
有解决任务的线索吗?
如果您愿意接受 GNU 并行答案:
parallel 'php scan.php {} > {.}.txt' ::: *.pdf
或者,如果您的 PDF 文件位于子目录中:
find . -name \*.pdf | parallel 'php {} > {.}.txt'
以下演示作业立即启动,有可用的作业槽,因此,仅使用 2 个内核,它执行 10 秒睡眠和 5 次每次 2 秒的进一步睡眠,全部在 10 秒内完成:
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
我想运行一些并行的进程,我想做一个例子:
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
....
有解决任务的线索吗?
如果您愿意接受 GNU 并行答案:
parallel 'php scan.php {} > {.}.txt' ::: *.pdf
或者,如果您的 PDF 文件位于子目录中:
find . -name \*.pdf | parallel 'php {} > {.}.txt'
以下演示作业立即启动,有可用的作业槽,因此,仅使用 2 个内核,它执行 10 秒睡眠和 5 次每次 2 秒的进一步睡眠,全部在 10 秒内完成:
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