设计一个10线程的过程

时间:2014-01-31 19:46:55

标签: multithreading shell background parallel-processing subshell

我有大约500个奇数数据文件位于目录中。我正在使用命令处理这些文件。问题是它连续地接收每个,当然任何实用程序也是如此 目前,我的流程所做的是产生大约500个流程,将它们分成10个批次,每个流程等待。像这样 。每个设计1个文件== 1个进程。

command1 <parameters> > log 2&>1&
command2 <parameters> > log 2&>1&
command3 <parameters> > log 2&>1&
command4 <parameters> > log 2&>1&  /# ....till 10
wait 
command11 <parameters> > log 2&>1&
command1 <parameters> > log 2&>1&
command1 <parameters> > log 2&>1& /# ...till 20 
wait
command1 <parameters> > log 2&>1& 

所以我不会同时砸掉系统。该命令实际上是另一系列shell和c代码,它们解析数据文件并进行一些检查,包括连接到Oracle。 我想重新设计它,以便每次运行命令时我都不会打开新的数据库连接。所以我们说有100个文件。我想打开10个DB连接,而不是100个单独的连接。 我想要的方法是先计算我有多少个文件。将它们除以10.每个分区是10个文件的“批处理” - 所以不是100个,而是150个文件,该过程应该自动创建15个目录。每个目录应该在其中移动10个文件然后 我可以跑

 command1 <parameters> Directorypath  > log 2&>1& 
/# command can pick up all files in a directory or a single file
/# ct till command 10 ...
....
 command10 <parameters> Directorypath  > log 2&>1& 

10个文件== 1个按此设计处理。

任何建议签署了关于如何做到这一点的命令。 ty

1 个答案:

答案 0 :(得分:1)

使用GNU parallel,您可以并行地对目录中的所有文件运行命令,每次10个:

parallel --gnu -j 10 yourcommand --yourflags {} ::: *

它会运行

yourcommand --yourflags file1
yourcommand --yourflags file2

所以一个,一次十个。