我有一个200个命令的列表/队列,需要在Linux服务器上的shell中运行。
我只想一次最多运行10个进程(从队列)。一些进程需要几秒钟才能完成,其他进程则需要更长的时间。
当一个进程完成时,我希望下一个命令从队列中“弹出”并执行。
有人有解决这个问题的代码吗?
进一步阐述:
有200件事要做,排成一列。我一次最多要做10件事。当一根线完成一件工作时,它应该向队列询问下一件工作。如果队列中没有更多的工作,线程应该死。当所有的线都死了,就意味着所有的工作都完成了。
我试图解决的实际问题是使用imapsync
将200个邮箱从旧邮件服务器同步到新邮件服务器。有些用户的邮箱很大,需要很长时间才能同步,有些用户的邮箱很小,同步速度很快。
我想您可以使用make和make-j xx命令来完成这项工作。
也许像这样的makefile
make-j 10-f生成文件
Parallel就是为了这个目的而做的。
与其他解决方案相比,Parallel的优点之一是它确保输出不混合。在Parallel中执行
traceroute
操作很好,例如:在shell上,
xargs
可用于对并行命令处理进行排队。例如,如果总是有3个睡眠并行,每个睡眠1秒,总共执行10个睡眠它总共能睡4秒钟。如果您有一个名称列表,并且希望将名称传递给执行的命令,再次并行执行3个命令,请执行
将执行命令
process_name alice
、process_name bob
等。相关问题 更多 >
编程相关推荐