linux - 如何使用 GNU 并行运行命令列表,其中 4 个命令同时运行

标签 linux debian gnu gnu-parallel

我有我想要调用的 shell 命令列表。最多可同时运行四个进程。

一旦进程计数低于 4,下一个命令就会发送到 shell,直到所有命令完成。

我已经从 stackoverflow 的同事那里得到了一个“部分”工作的解决方案,但是它依赖于 wait -n,这在我的 debian wheezy 安装中不可用。

Link to other stackoverflow question

一个人提到了 GNU Parallel。这能实现吗?非常感谢任何指导!

nohup scrapy crawl urlMonitor -a slice=0 &
nohup scrapy crawl urlMonitor -a slice=1 &
nohup scrapy crawl urlMonitor -a slice=2 &
nohup scrapy crawl urlMonitor -a slice=3 &
nohup scrapy crawl urlMonitor -a slice=4 &
nohup scrapy crawl urlMonitor -a slice=5 &
nohup scrapy crawl urlMonitor -a slice=6 &
nohup scrapy crawl urlMonitor -a slice=7 &
nohup scrapy crawl urlMonitor -a slice=8 &
nohup scrapy crawl urlMonitor -a slice=9 &
nohup scrapy crawl urlMonitor -a slice=10 &
nohup scrapy crawl urlMonitor -a slice=11 &
nohup scrapy crawl urlMonitor -a slice=12 &
nohup scrapy crawl urlMonitor -a slice=13 &
nohup scrapy crawl urlMonitor -a slice=14 &
nohup scrapy crawl urlMonitor -a slice=15 &
nohup scrapy crawl urlMonitor -a slice=16 &
nohup scrapy crawl urlMonitor -a slice=17 &
nohup scrapy crawl urlMonitor -a slice=18 &
nohup scrapy crawl urlMonitor -a slice=19 &
nohup scrapy crawl urlMonitor -a slice=20 &
nohup scrapy crawl urlMonitor -a slice=21 &
nohup scrapy crawl urlMonitor -a slice=22 &
nohup scrapy crawl urlMonitor -a slice=23 &
nohup scrapy crawl urlMonitor -a slice=24 &
nohup scrapy crawl urlMonitor -a slice=25 &
nohup scrapy crawl urlMonitor -a slice=26 &
nohup scrapy crawl urlMonitor -a slice=27 &
nohup scrapy crawl urlMonitor -a slice=28 &
nohup scrapy crawl urlMonitor -a slice=29 &
nohup scrapy crawl urlMonitor -a slice=30 &
nohup scrapy crawl urlMonitor -a slice=31 &
nohup scrapy crawl urlMonitor -a slice=32 &
nohup scrapy crawl urlMonitor -a slice=33 &
nohup scrapy crawl urlMonitor -a slice=34 &
nohup scrapy crawl urlMonitor -a slice=35 &
nohup scrapy crawl urlMonitor -a slice=36 &
nohup scrapy crawl urlMonitor -a slice=37 &
nohup scrapy crawl urlMonitor -a slice=38 &

最佳答案

如果您有 GNU Parallel,您可以执行以下操作:

parallel -j4 scrapy crawl urlMonitor -a slice={} ::: {1..38}

GNU Parallel 是一个通用并行器,可以轻松地在同一台计算机或多台您可以通过 ssh 访问的计算机上并行运行作业。

如果您想要在 4 个 CPU 上运行 32 个不同的作业,则并行化的直接方法是在每个 CPU 上运行 8 个作业:

Simple scheduling

GNU Parallel 在完成后会生成一个新进程 - 保持 CPU 处于事件状态,从而节省时间:

GNU Parallel scheduling

安装

如果您的发行版未打包 GNU Parallel,您可以进行个人安装,不需要 root 访问权限。这样做可以在 10 秒内完成:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

有关其他安装选项,请参阅 http://git.savannah.gnu.org/cgit/parallel.git/tree/README

了解更多

查看更多示例:http://www.gnu.org/software/parallel/man.html

观看介绍视频:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

浏览教程:http://www.gnu.org/software/parallel/parallel_tutorial.html

注册电子邮件列表以获得支持:https://lists.gnu.org/mailman/listinfo/parallel

关于linux - 如何使用 GNU 并行运行命令列表,其中 4 个命令同时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27493205/

相关文章:

linux - 在启动时、x11 启动之前、USB 填充之后运行脚本

erlang - RabbitMQ (beam.smp) 和高 CPU/内存负载问题

assembly - 什么决定了内存重映射操作后的位置无关性?

linux - 在 R ("No such file or directory"中安装包(AlgDesign 和 ggplot2)时出现问题

linux - CentOS 上使用 DNS 的所有网络事件延迟

linux - 在多台机器上的oracle JDK上执行tzupdater工具

c - 每个 inode 的文件位置?

使用 Apache 在树莓派 (Debian) 上运行 PHP

linux - GNU 时间内存输出是否也考虑了子进程?

linux - 如何使 GNU Parallel 使用记录分隔符从多个文件中获取输入