我有三个相同的 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 将并行运行。