У меня есть следующий код perl:
use Parallel::ForkManager;
my $maxpro = 15;
my $pm = Parallel::ForkManager->new($maxpro);
my $SampId;
my $SampDir;
my $RunId;
my $Runfile;
my %hash;
foreach $RunId(keys(%hash)) {
$pm->start and next;
$SampId = $hash{$RunId};
$Runfile = $rundir . $RunId . "fastq";
if ($SampId =~ m/16S/) {
$SampDir = $SiXSSdir . $SampId . "_Split/";
}
elsif ($SampId =~ m/ITS/) {
$SampDir = $ITSdir . $SampId . "_Split/";
}
#make a directory for each file
my $dirouteach = $outdir . $SampId . "Single_directory.out";
my $dirm4 = "bsub -o $dirouteach mkdir $SampDir";
system('bash', '-c', "$dirm4") == 0 or die "Can't create each single subdirectories for either 16S or ITS, or both, see line 114" . "\n";
$pm ->finish;
}
$pm -> wait_all_children();
Однако, когда я запускаю его таким образом, все дочерние проекты выполняются, но основной сценарий завершается преждевременно, даже до того, как дочерние объекты завершены, онтакже не выдает никаких сообщений об ошибках.Я также попытался запустить его, удалив $pm ->finish;
, но в этом случае сценарии застряли и ждут, пока дети не закончат.Я уверен, что я делаю что-то не так с менеджером вилок (который я никогда не использовал раньше).Моей целью было бы просто использовать его для распараллеливания моих заданий, но затем подождать, пока ВСЕ из них будут завершены, и затем перейти к моему сценарию.Любая помощь будет высоко ценится, спасибо!