同时运行多个 perl 脚本

同时运行多个 perl 脚本

我有三个相同的 perl 脚本;比如 test1.pl、test2.pl、test3.pl

每个 perl 脚本都有一组命令。例如;

运行test1.pl的命令perl test1.pl arg1 arg2 &

测试1.pl

#!usr/bin/perl

`command1`;   ### Takes ~30 Minute and use 30 core
`command2`;   ### Takes ~10 Minute and use 2 core
`command3`;   ### Takes ~10 Minute and use 1 core
`command4`;   ### Takes ~10 Minute and use 1 core

test2.pl 和 test3.pl 也类似

现在,我想在 test1.pl 中的 command1 完成后立即运行 test2.pl,以利用空闲的 CPU 线程。这样test2.pl 中的 command1可以使用空闲线程尽管“command2、command3和command4可以同时完成也。

下一步也是一样(test2.pl 中的命令 1 完成后立即运行 test3.pl)。

因此,test1.pl 可能看起来像这样;

测试1.pl

#!usr/bin/perl

`command1`;   ### Takes ~30 Minute and use 30 core

**`perl test2.pl arg3 arg4 &`;**

`command2`;   ### Takes ~10 Minute and use 2 core

`command3`;   ### Takes ~10 Minute and use 1 core

`command4`;   ### Takes ~10 Minute and use 1 core

但是,这样运行(test2.pl)会暂停 test1.pl 剩余的命令。所以这不是一个好办法。

任何建议或建议。谢谢。

阿米特

答案1

您的 perl 脚本可能会自行启动后台进程 (X &)。它可能使用 fork 函数调用。

#!usr/bin/perl

`command1`;   ### Takes ~30 Minute and use 30 core

# start child process
my $child_pid = fork() // die "Can't fork: $!"; # die unless defined($child_pid);
if ($child_pid == 0 ) {
   # am the child process
   exec( 'perl', 'test2.pl' );
   die "exec failed!";
}
# am the parent process

`command2`;   ### Takes ~10 Minute and use 2 core
`command3`;   ### Takes ~10 Minute and use 1 core
`command4`;   ### Takes ~10 Minute and use 1 core

 # wait for the child process to finish 
 waitpid $child_pid, 0;

答案2

方法:1

通过使用 Parallel::ForkManager,您可以并行运行脚本。

# you create list and feed into for loop
for loop[i]:
   execute the perl script[i]
end

方法:2

&我们可以选择在 Linux 终端中在一行中执行多个 Perl 脚本。

例子:perl script1 & perl script2 & perl script3

脚本 1、2、3 将并行运行。

相关内容