Я использую Thread::Pool::Simple
, чтобы создать несколько рабочих потоков.Каждый рабочий поток выполняет некоторые вещи, включая вызов chdir
с последующим выполнением внешнего сценария Perl (из браузера генома jbrowse
, если это имеет значение).Я использую capturex
для вызова внешнего скрипта и умираю при его сбое.
Я обнаружил, что когда я использую более одного потока, все становится грязно.после некоторых исследований.кажется, что текущий каталог некоторых потоков не является правильным.
Возможно, chdir
распространяется между потоками (то есть не является потокобезопасным)?Или, может быть, это что-то с capturex
?
Итак, как мне безопасно установить рабочий каталог для каждого потока?
** ОБНОВЛЕНИЕ **
Следуя предложениям поизменить dir во время выполнения, я хотел бы спросить, как именно я должен передать эти две команды capturex
?
в настоящее время у меня есть:
my @args = ( "bin/flatfile-to-json.pl", "--gff=$gff_file", "--tracklabel=$track_label", "--key=$key", @optional_args );
capturex( [0], @args );
Как добавить другую команду в@args
?Будет ли capturex
продолжать умирать при ошибках какой-либо из команд?