使用库存Linux工具的最小"任务队列"来利用多核CPU

Man*_*uel 7 queue parallel-processing bash

使用bash和常用工具为Linux构建最小任务队列系统的最佳/最简单方法是什么?

我有一个9'000行的文件,每行有一个bash命令行,命令是完全独立的.

command 1 > Logs/1.log
command 2 > Logs/2.log
command 3 > Logs/3.log
...
Run Code Online (Sandbox Code Playgroud)

我的盒子有多个核心,我想同时执行X任务.我在网上搜索了一个很好的方法来做到这一点.显然,很多人都有这个问题,但到目前为止还没有人有一个好的解决方案.

如果解决方案具有以下功能,那将是很好的:

  • 可以解释多个命令(例如command; command)
  • 可以解释行上的流重定向(例如ls > /tmp/ls.txt)
  • 仅使用常见的Linux工具

如果它适用于其他Unix克隆而没有太多异国情调的要求,则可获得奖励积分.

Ger*_*mbs 14

你可以将命令列表转换为Makefile吗?如果是这样,你可以运行"make -j X".


Ole*_*nge 9

GNU Parallel http://www.gnu.org/software/parallel/是一种比PPSS更加通用的并行化工具.

如果runfile包含:

command 1 > Logs/1.log
command 2 > Logs/2.log
command 3 > Logs/3.log
Run Code Online (Sandbox Code Playgroud)

你可以做:

cat runfile | parallel -j+0
Run Code Online (Sandbox Code Playgroud)

每个CPU核心运行一个命令.

如果您的命令如上所述,您甚至不需要运行文件,但可以执行以下操作:

seq 1 3 | parallel -j+0 'command {} > Logs/{}.log'
Run Code Online (Sandbox Code Playgroud)

如果有更多计算机可用于处理,您可能需要查看GNU Parallel的--sshlogin和--trc选项.