Я получаю следующее сообщение об ошибке при использовании Perl-модуля Parallel :: ForkManager и не могу понять, что не так в моем коде.
Что странно, так это то, что программа работает нормально для первых 70 файлов BAM, которые она отправляет в разные потоки, а затем выдает сообщение об ошибке ниже.
Любая помощь будет очень признательна.
Большое спасибо. :)
Вот ошибки:
Не удается выполнить ветвь: невозможно выделить память в /usr/local/perl-5.24.0/lib/site_perl/5.24.0/Parallel/ForkManager.pm строка 52, строка 8260.
Сохраняемому модулю не удалось сохранить дочернюю структуру данных во временном файле "/tmp/1341650.1.longjob.q/dZnCgF1MiR/Parallel-ForkManager-28852-28855.txt": невозможно создать /tmp/1341650.1. longjob.q / dZnCgF1MiR / Parallel-ForkManager-28852-28855.txt: Нет такого файла или каталога в /usr/local/perl-5.24.0/lib/site_perl/5.24.0/Parallel/ForkManager.pm строка 84.
Вот мой код:
if ($threads == 1) {
for my $id (0 .. $nbInputFiles) {
$self->{$id}->{_currentFile} = $self->{inputFiles}[$id] ;
$self->readBamInputFile($id) ;
$self->correctMatrice($id) ;
print STDERR "INFO $prog $datestring: $self->{$id}->{_currentFile} -> correcting matrice done !\n" ;
}
}
else {
my $pm = new Parallel::ForkManager($threads);
$pm->set_waitpid_blocking_sleep(0);
$pm->run_on_finish(sub {
my ($pid, $exit, $id, $signal, $core, $data) = @_;
$self->{$id}->{cov} = $data->{ret}->{$id}->{cov} ;
$self->{$id}->{_currentSample} = $data->{ret}->{$id}->{_currentSample} ;
$self->correctMatrice($id) ;
print STDERR "INFO $prog $datestring: $data->{ret}->{$id}->{_currentFile} -> correcting matrice done !\n" ;
$ret[$id] = delete $data->{ret};
$err[$id] = delete $data->{err};
});
for my $id (0 .. $nbInputFiles) {
$self->{$id}->{_currentFile} = $self->{inputFiles}[$id] ;
$pm->start($id) and next;
# here do the child
# my $res = eval { $task[0]->($self) };
my $res = eval { &readBamInputFile($self, $id) };
$pm->finish(0, { ret => $self, err => $@ });
}
$pm->wait_all_children;
}