可怜的GNU并行在ksh中实现?


8

我想使用GNU parallel的功能,在该功能中它可以执行命令和它并行输入的列表,并在完成后将其吐出,但是,我不想在所有服务器上并行安装GNU。

还是并行版本的xargs

GNU Parallel的功能是否有ksh实现?在这种情况下,不必像GNU Parallel那样按顺序完成,只要可以通过管道或存储所有输出即可。我也想避免使用临时文件。


GNU Parallel是单个perl脚本。我很好奇,为什么您更喜欢安装ksh脚本而不是安装设计为具有很少依赖性的单个perl脚本。您能详细说明一下吗?(公开:我是GNU Parallel的作者)
Ole Tange

Answers:


6

如果要在具有多个内核的计算机上并行化,则可以使用(GNU)xargs,例如:

echo seq_[0-9][0-9].gz | xargs -n 1 -P 16 ./crunching

含义:xargs并行启动最多16个进程,./crunching每个进程使用stdin中的1个令牌。

您也可以split与xargs结合使用。

或者,您可以创建一个简单的Makefile来执行Job和调用make -f mymf -j $CORES(此解决方案需要临时文件)。

PS: GNU并行手册还包括与其他工具的一些比较,包括xargsmake,有趣的是,它们编写:

(很早就使用make -j实现了GNU parallel的早期版本)。


对于质询者而言,重要的是“所有输出都可以通过管道传输或存储”。xargs众所周知,在并行运行时这样做很糟糕,因为输出会混合。
Ole Tange

@maxschlepzig:我同意您的回答100%,我总是只使用xargs。许多人只是不知道GNU xargs能够并行执行!
JM Becker

0

看看parallel --embed哪一个将GNU Parallel嵌入到您使用它的相同Shell脚本中。

parallel --embed > new_script

然后编辑new_script。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.