正好运行x个命令

时间:2015-12-12 05:31:10

标签: python shell

我总共要从Shell脚本运行n个命令,其中x应该在任何给定时间运行。直到现在我有:

command 1 &
command 2 &
..
..
command x &
wait

虽然上面的代码确保一次只运行x个命令,但它会一直等到第一个x命令完成后产生下一个x。我希望下一个命令在这些x中的任何一个完成后立即执行。我怎样才能做到这一点?

另外,这可以通过在Python中编写脚本来实现吗?

2 个答案:

答案 0 :(得分:1)

我建议使用xargs -P $ x。我经常使用xargs来保持给定系统上的所有内核运行,或者确保我的cpu在时间关键应用程序中饱和

答案 1 :(得分:1)

更新了答案

现在您已经提供了有关您实际需求的更多信息,我建议您在失败的被叫sites.txt中抓取您希望抓取的所有网站的名称,每行一个,如下所示:

www.google.com
www.hp.com
www.ibm.com

然后你可以像这样运行GNU Parallel

parallel -j n -a sites.txt scrapy crawl

如果要将输出定向到每个命令的单独文件,如果命令支持-o <outputfile>选项,则可以使用如下语法:

parallel -j n -a sites.txt scrape crawl {} -o {}.json

parallel将替换它看到{}的网站名称,以便生成输出文件

www.google.com.json

等等。

原始答案

使用GNU Parallel。通常,如果您希望n个作业正在运行,请使用

parallel -j n command

在不知道如何生成参数的情况下,很难进一步建议,除非参数可以来自文件(如果使用-a file),或者如果它们本质上是文件名,则可以将它们之后用三重冒号分隔

parallel -j n command ::: *.jpg