并行的linux批处理作业

标签 linux parallel-processing background-process batch-processing

我有七个特定软件的许可证。因此,我想同时开始 7 个工作。我可以使用“&”来做到这一点。现在,“等待”命令等到所有这 7 个进程结束以产生下一个 7。现在,我想编写 shell 脚本,在我开始前七个之后,当一个工作完成时我想开始另一个。这是因为这 7 个工作中的一些可能需要很长时间,而另一些则很快就完成了。我不想浪费时间等待他们全部完成。有没有办法在 Linux 中做到这一点?你能帮帮我吗?

谢谢。

最佳答案

GNU parallel是要走的路。它设计用于启动同一命令的多个实例,每个实例都具有从 stdin 或外部文件检索的不同参数。

假设您的许可脚本名为 myScript,每个实例都具有相同的选项 --arg1 --arg2 并采用可变参数 --argVariable 对于每个生成的实例,这些参数存储在文件 myParameters 中:

cat myParameters | parallel -halt 1 --jobs 7 ./myScript --arg1 --argVariable {} --arg2

解释:

  • -halt 1 告诉 parallel 在一个作业失败时停止所有作业
  • --jobs 7 将启动 7 个 myScript
  • 实例

在基于 debian 的 linux 系统上,您可以安装 parallel 使用:

sudo apt-get install parallel

作为奖励,如果您的许可证允许,您甚至可以告诉 parallel 在多台计算机中启动这 7 个实例。

关于并行的linux批处理作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13536231/

相关文章:

linux - 本地处理的数据包上的 netfilter 事件(netfilter C 内核模块代码)

Linux 中的 Python OSError no 7(参数列表太长)

linux - GCC在centos上安装pyICU报错

c# - 使用 Parallel.For 创建列表列表 - 我做错了什么?

c - 使用 OpenMP 并行化 C 代码后的性能损失

windows-phone-8 - Windows Phone 8 - 保持后台位置跟踪超过四个小时

python - 如何关闭被杀死的程序打开的套接字?

c++ - 如何在大函数内编写多线程函数?

flutter - 在后台 flutter 应用程序仅工作 1 分钟后停止工作,Dart-Isolates 是否适合尝试?

java - 让守护线程运行直到 JVM 退出