Можно ли реализовать тайм-аут (лимит времени) для форка с помощью Parallel::ForkManager?
Базовый скрипт Parallel::ForkManager выглядит следующим образом
use Parallel::ForkManager;
my $pm = Parallel::ForkManager->new( 10 );
for ( 1 .. 1000 ) {
$pm->start and next;
# some job for fork
$pm->finish;
}
$pm->wait_all_children();
Я хотел бы ограничить время для "# какой-то работы для форка". Например, если его не закончить за 90 секунд. то его (вилку) следует убить/завершить. Я думал о использовании этого , но должен сказать, что я не знаю, как использовать его с Parallel::ForkManager.
Спасибо, Хоббс и Икегами. Оба ваших предложения сработали..... но только в этом базовом примере, а не в моем реальном сценарии :(. Эти вилки останутся там навсегда, и, честно говоря, я не знаю, почему. Пользуюсь этим скриптом пару месяцев. Ничего не менял (хотя многое зависит от внешних переменных). Каждый форк должен загрузить страницу с веб-сайта, проанализировать ее и сохранить результаты в файл. Это не должно занимать более 30 секунд на вилку. Время ожидания установлено на 180 секунд. Эти висящие вилки абсолютно случайны, поэтому очень сложно отследить проблему. Вот почему я придумал временное простое решение - тайм-аут и убийство.
Что может отключить (прервать) ваши методы тайм-аута в моем коде? У меня нет другого alarm()
в моем коде.
Одна из вилок зависла на 1 час 38 минут и вернула "timeout PID" - это то, что я набрал в die()
для alarm()
. Так что тайм-аут работает... но поздно примерно на 1ч36,5м ;). У вас есть идеи?